AttributeError: ‘sqlalchemy.cimmutabledict.immutabledict‘ object has no attribute ‘setdefault‘报错解决记录

在使用Python 3.8.3、Flask 1.0.2和Flask-SQLAlchemy 2.4.0进行Flask项目实践时,遇到FSADeprecationWarning和AttributeError。错误源于SQLAlchemy 1.4.27版本。通过查看其他开发者的经验,发现可能是SQLAlchemy版本与环境不兼容。将SQLAlchemy回退到1.3.24后,问题得到解决,项目练习得以继续。

今天在练习Flask项目时,Python 版本为3.8.3,Flask的版本为1.0.2,Flask-SQLAlchemy的版本为2.4.0。SQLAlchemy的版本为1.4.27。

>>> from flasker import db
D:\python\env\flasker\lib\site-packages\flask_sqlalchemy\__init__.py:834: FSADeprecationWarning: SQLALCHEMY_TRACK_MOD
IFICATIONS adds significant overhead and will be disabled by default in the future.  Set it to True or False to suppr
ess this warning.
  warnings.warn(FSADeprecationWarning(

>>> db.create_all()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "D:\python\env\flasker\lib\site-packages\flask_sqlalchemy\__init__.py", line 1033, in create_all
    self._execute_for_all_tables(app, bind, 'create_all')
  File "D:\python\env\flasker\lib\site-packages\flask_sqlalchemy\__init__.py", line 1025, in _execute_for_all_tables
    op(bind=self.get_engine(app, bind), **extra)
  File "D:\python\env\flasker\lib\site-packages\flask_sqlalchemy\__init__.py", line 956, in get_engine
    return connector.get_engine()
  File "D:\python\env\flasker\lib\site-packages\flask_sqlalchemy\__init__.py", line 560, in get_engine
    options = self.get_options(sa_url, echo)
  File "D:\python\env\flasker\lib\site-packages\flask_sqlalchemy\__init__.py", line 575, in get_options
    self._sa.apply_driver_hacks(self._app, sa_url, options)
  File "D:\python\env\flasker\lib\site-packages\flask_sqlalchemy\__init__.py", line 878, in apply_driver_hacks
    sa_url.query.setdefault('charset', 'utf8')
AttributeError: 'sqlalchemy.cimmutabledict.immutabledict' object has no attribute 'setdefault'

关于AttributeError: 'sqlalchemy.cimmutabledict.immutabledict' object has no attribute 'setdefault'的报错,参考了其他同学的踩坑博文,在此,谢谢前辈的问题记录。

参考的博文链接:

1、AttributeError: ‘sqlalchemy.cimmutabledict.immutabledict‘ object has no attribute ‘setdefault‘_Alex抱着爆米花的博客-优快云博客

2、AttributeError: ‘sqlalchemy.cimmutabledict.immutabledict‘ object has no attribute ‘setdefault‘_qingliu_D的博客-优快云博客

但是,并不能直接运用2位前辈的解决方案,因为大家的运行环境并不完全一致,然而,大家的经历,倒是给到我一定的问题解决方向指引,感觉问题就是出在SQLAlchemy版本和PYTHON的运行环境可能不是特别适配,于是进行了调整的尝试,最终取用了SQLAlchemy的版本为1.3.24,替换了之前的1.4.27,从而越过了这个报错,继续了后续的项目练习。

python flask运行后报错[2025-03-18 08:41:05,126] ERROR in app: Exception on /user/login [POST] Traceback (most recent call last): File "E:\PythonFlask项目实战\95944qjw\.venv\lib\site-packages\sqlalchemy\util\_collections.py", line 1008, in __call__ return self.registry[key] KeyError: <greenlet.greenlet object at 0x000001E008975640 (otid=0x000001E008910DE0) current active started main> During handling of the above exception, another exception occurred: Traceback (most recent call last): File "E:\PythonFlask项目实战\95944qjw\.venv\lib\site-packages\flask\app.py", line 2447, in wsgi_app response = self.full_dispatch_request() File "E:\PythonFlask项目实战\95944qjw\.venv\lib\site-packages\flask\app.py", line 1952, in full_dispatch_request rv = self.handle_user_exception(e) File "E:\PythonFlask项目实战\95944qjw\.venv\lib\site-packages\flask\app.py", line 1821, in handle_user_exception reraise(exc_type, exc_value, tb) File "E:\PythonFlask项目实战\95944qjw\.venv\lib\site-packages\flask\_compat.py", line 39, in reraise raise value File "E:\PythonFlask项目实战\95944qjw\.venv\lib\site-packages\flask\app.py", line 1950, in full_dispatch_request rv = self.dispatch_request() File "E:\PythonFlask项目实战\95944qjw\.venv\lib\site-packages\flask\app.py", line 1936, in dispatch_request return self.view_functions[rule.endpoint](**req.view_args) File "E:\PythonFlask项目实战\95944qjw\blueprints\user.py", line 95, in login user = UserModel.query.filter_by(username=username).first() File "E:\PythonFlask项目实战\95944qjw\.venv\lib\site-packages\flask_sqlalchemy\__init__.py", line 514, in __get__ return type.query_class(mapper, session=self.sa.session()) File "E:\PythonFlask项目实战\95944qjw\.venv\lib\site-packages\sqlalchemy\orm\scoping.py", line 47, in __call__ sess = self.registry() File "E:\PythonFlask项目实战\95944qjw\.venv\lib\site-packages\sqlalchemy\util\_collections.py", line 1010, in __call__ return self.registry.setdefault(key, self.createfunc()) File "E:\PythonFlask项目实战\95944qjw\.venv\lib\site-packages\sqlalchemy\orm\session.py", line 4225, in __call__ return self.class_(**local_kw) File "E:\PythonFlask项目实战\95944qjw\.venv\lib\site-packages\flask_sqlalchemy\__init__.py", line 138, in __init__ bind = options.pop('bind', None) or db.engine File "E:\PythonFlask项目实战\95944qjw\.venv\lib\site-packages\flask_sqlalchemy\__init__.py", line 943, in engine return self.get_engine() File "E:\PythonFlask项目实战\95944qjw\.venv\lib\site-packages\flask_sqlalchemy\__init__.py", line 962, in get_engine return connector.get_engine() File "E:\PythonFlask项目实战\95944qjw\.venv\lib\site-packages\flask_sqlalchemy\__init__.py", line 555, in get_engine options = self.get_options(sa_url, echo) File "E:\PythonFlask项目实战\95944qjw\.venv\lib\site-packages\flask_sqlalchemy\__init__.py", line 570, in get_options self._sa.apply_driver_hacks(self._app, sa_url, options) File "E:\PythonFlask项目实战\95944qjw\.venv\lib\site-packages\flask_sqlalchemy\__init__.py", line 884, in apply_driver_hacks sa_url.query.setdefault('charset', 'utf8') AttributeError: 'sqlalchemy.cimmutabledict.immutabledict' object has no attribute 'setdefault' 127.0.0.1 - - [18/Mar/2025 08:41:05] "POST /user/login HTTP/1.1" 500 - 127.0.0.1 - - [18/Mar/2025 08:41:05] "GET /static/front/js/html5shiv.min.js HTTP/1.1" 404 - 127.0.0.1 - - [18/Mar/2025 08:41:05] "GET /static/front/js/respond.min.js HTTP/1.1" 404 - 127.0.0.1 - - [18/Mar/2025 08:41:05] "GET /static/front/js/skin/layer.css HTTP/1.1" 404 -
最新发布
03-19
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值