Flask调用db.session.add()添加对象报错,求技术解决方案
问题解决:Flask-SQLAlchemy添加对象到Session时报错
嘿,我一眼就揪出问题所在啦!你看报错信息里的关键行:
track_modifications = app.config.setdefault['SQLALCHEMY_TRACK_MODIFICATIONS'] TypeError: 'builtin_function_or_method' object is not subscriptable
这是因为你在配置Flask应用的时候,把app.config.setdefault这个方法当成字典用方括号[]访问了——但它是个方法,得用圆括号()来调用传参才行!
具体修复步骤:
找到你初始化Flask应用和SQLAlchemy的代码部分,修正
SQLALCHEMY_TRACK_MODIFICATIONS的配置方式:
推荐直接显式设置:app = Flask(__name__) # 其他数据库连接配置... app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False db = SQLAlchemy(app)或者用
setdefault的正确调用方式(如果想给配置设置默认值):app.config.setdefault('SQLALCHEMY_TRACK_MODIFICATIONS', False)重启你的Python交互环境或者应用,重新导入模型并执行添加操作:
>>> from hello import Role, User, db >>> admin_role = Role(name='Admin') >>> db.session.add(admin_role) >>> db.session.commit() # 别忘了提交会话完成写入哦!
这个配置项是用来关闭SQLAlchemy对对象修改的自动追踪,避免不必要的性能消耗,现在Flask-SQLAlchemy要求必须显式设置它,你的语法错误直接触发了这个报错,修正后就能正常操作数据库啦~
内容的提问来源于stack exchange,提问作者HungryBird
相关产品推荐
相关产品推荐

