20230126 - TurboGears 提示 builtins.NameError Session is not defined
问题现象:TurboGears 常规操作,运行 gearbox 服务后报错:
builtins.NameError
'Session' is not defined
解决办法:卸载最新版 SQLAlchemy 1.4 ,重新安装 SQLAlchemy 1.3。
重现步骤:
- 随便 quickstart 一个项目
- 运行 gearbox serve --reload
- 打开 http://127.0.0.1:8080,点 Login,输入 bootstrap 中的用户名 manager 和密码 managepass
- 登录成功后,点击 Groups 或 Users 等表,页面出错:
...
C:\Python311\Lib\site-packages\sprox\providerselector.py 代码 101 行
...
if isinstance(hint, (Session, ScopedSession)): session = hint
...
分析过程:
- 事实:TurboGears 2.4.3 documentation 很成熟,Github 上没有相关 issue,Google 中缺少类似搜索;推理:很大概率是我自己的环境问题;
- 用 PyCharm 打开出错的代码 providerselector.py 101 行,Ctrl 点击 Session 跳转,查看前后端源代码,Session 报错的原因,怀疑可能与数据库 autocommit 有关。
- 尝试重新安装旧版本数据库组件依赖 SQLAlchemy 1.3,发现问题解决。