从flask_sqlalchemy导入SQLAlchemy报错AttributeError求助
Flask-SQLAlchemy导入错误:AttributeError: module 'sqlalchemy.orm' has no attribute 'DeclarativeMeta'
我在MacBook的VSCode上正常运行的Flask项目,想移植到树莓派长期运行。安装了和Mac上相同版本的依赖包,但执行from flask_sqlalchemy import SQLAlchemy时出现如下错误:
Python 3.7.16 (default, Jan 12 2023, 13:19:39) [GCC 6.3.0 20170516] on linux Type "help", "copyright", "credits" or "license" for more information. >>> from flask_sqlalchemy import SQLAlchemy Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/home/pi/stocktracker101/lib/python3.7/site-packages/flask_sqlalchemy/__init__.py", line 5, in <module> from .extension import SQLAlchemy File "/home/pi/stocktracker101/lib/python3.7/site-packages/flask_sqlalchemy/extension.py", line 17, in <module> from .model import _QueryProperty File "/home/pi/stocktracker101/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'
以下是虚拟环境中已安装的包列表:
Package Version ------------------- ----------- appdirs 1.4.4 beautifulsoup4 4.11.1 bs4 0.0.1 certifi 2022.12.7 charset-normalizer 2.1.1 click 8.1.3 cssselect 1.2.0 fake-useragent 1.1.1 feedparser 6.0.10 Flask 2.2.2 Flask-SQLAlchemy 3.0.2 gunicorn 20.1.0 idna 3.4 importlib-metadata 4.13.0 importlib-resources 5.10.2 itsdangerous 2.1.2 Jinja2 3.1.2 lxml 4.9.2 MarkupSafe 2.1.1 numpy 1.21.6 pandas 1.3.5 parse 1.19.0 pip 22.3.1 psycopg2 2.8.4 psycopg2-binary 2.8.4 pyee 8.2.2 pyppeteer 1.0.2 pyquery 2.0.0 python-dateutil 2.8.2 pytz 2022.7 requests 2.28.1 requests-html 0.10.0 setuptools 47.1.0 sgmllib3k 1.0.0 six 1.16.0 soupsieve 2.3.2.post1 SQLAlchemy 1.3.15 tqdm 4.64.1 typing_extensions 4.4.0 urllib3 1.26.14 w3lib 2.1.1 websockets 10.4 Werkzeug 2.2.2 yahoo-fin 0.8.9.1 zipp 3.11.0
问题原因及解决方法
问题核心是版本不兼容:Flask-SQLAlchemy 3.0.2 要求 SQLAlchemy 版本至少为1.4.0,但你当前安装的是1.3.15,版本过低,导致找不到新版本才引入的DeclarativeMeta属性。
方案一:升级SQLAlchemy
- 激活虚拟环境:
source /home/pi/stocktracker101/bin/activate
- 升级到兼容版本:
pip install SQLAlchemy>=1.4.0
- 验证导入是否成功:
python -c "from flask_sqlalchemy import SQLAlchemy; print('导入成功')"
注意:如果项目代码基于SQLAlchemy 1.3.x语法编写,升级后可能需要调整部分代码(比如模型声明、查询API的变化)。
方案二:降级Flask-SQLAlchemy
如果不想修改项目代码,可以降级Flask-SQLAlchemy到兼容1.3.x的版本(比如2.5.1):
pip install Flask-SQLAlchemy==2.5.1
内容的提问来源于stack exchange,提问作者Rob F
相关产品推荐
相关产品推荐

