运行Flask应用遇AttributeError:sqlalchemy.orm无DeclarativeMeta属性
Flask启动报错:AttributeError: module 'sqlalchemy.orm' has no attribute 'DeclarativeMeta'
错误日志
ubuntu@ip-10-50-50-190:~/RHS_US/application$ python3 run.py Traceback (most recent call last): File "run.py", line 1, in <module> from portal import create_app File "/home/ubuntu/RHS_US/application/portal/__init__.py", line 7, in <module> from flask_sqlalchemy import SQLAlchemy File "/home/ubuntu/RHS_US/application/rhs_us_venv/lib/python3.7/site-packages/flask_sqlalchemy/__init__.py", line 5, in <module> from .extension import SQLAlchemy File "/home/ubuntu/RHS_US/application/rhs_us_venv/lib/python3.7/site-packages/flask_sqlalchemy/extension.py", line 17, in <module> from .model import _QueryProperty File "/home/ubuntu/RHS_US/application/rhs_us_venv/lib/python3.7/site-packages/flask_sqlalchemy/model.py", line 210, in <module> class DefaultMeta(BindMetaMixin, NameMetaMixin, sa.orm.DeclarativeMeta): AttributeError: module 'sqlalchemy.orm' has no attribute 'DeclarativeMeta'
已确认信息
已检查site-packages目录下的model.py文件,确认包含以下代码:
class DefaultMeta(BindMetaMixin, NameMetaMixin, sa.orm.DeclarativeMeta):
问题原因与解决办法
这个错误是由于Flask-SQLAlchemy与SQLAlchemy版本不兼容导致的:新版本SQLAlchemy(2.0+)已将DeclarativeMeta从sqlalchemy.orm迁移到sqlalchemy.orm.decl_api模块,但当前使用的旧版Flask-SQLAlchemy仍在调用旧API。
解决步骤
降级SQLAlchemy到兼容版本
若不想升级Flask-SQLAlchemy,可安装适配旧版的稳定SQLAlchemy版本:pip install sqlalchemy==1.4.49升级Flask-SQLAlchemy到最新兼容版
直接更新Flask-SQLAlchemy以适配新版SQLAlchemy:pip install --upgrade flask-sqlalchemy注意:升级后需检查代码中是否存在依赖旧API的逻辑,比如模型定义方式,新版推荐使用
db.Model或DeclarativeBase。临时代码修改(不推荐)
若暂时无法升级/降级,可手动修改flask_sqlalchemy/model.py中的代码:
将sa.orm.DeclarativeMeta替换为sa.orm.decl_api.DeclarativeMeta。此方法仅为临时修复,后续包更新会覆盖修改,不建议长期使用。
内容的提问来源于stack exchange,提问作者Nagesh Singh Chauhan
相关产品推荐
相关产品推荐

