我正在使用扩展名为flask-sqlalchemy
的简单Flask应用程序,可以从数据库插入和查询,但不能更新条目。
只要我密切关注文档示例和this book,就没想到会有这种问题,但是由于某种原因,它并没有按预期工作。
我在这里找到了建议的答案:
obj = MyTable.query.filter_by(col='something').first()
obj.attr.data = something_else
db.session.commit()
虽然这会更新应用程序中显示的对象数据,但不会更新数据库中的数据。
所以我尝试了这样的事情:
obj = MyTable.query.filter_by(col='something').first()
obj.attr.data = something_else
db.session.add(obj).on_conflict_do_update()
db.session.commit()
然后我得到了错误消息:Object is already attached to session '1' (this is '3')
。
在搜索此消息时,我发现它与会话未正确关闭有关(扩展程序自动完成)。据我了解,会话应在每个数据库请求后关闭。
我还偶然发现this 2013 article是我提到的那本书的作者,他在尝试删除行时遇到了相同的错误,看起来这是一个错误。
flask-sqlalchemy文档几乎不存在,这使我想到了SQLAlchemy文档。不幸的是,我的知识不允许我自己找到错误,而放弃使用flask-sqlalchemy会造成大量的返工...