Flask sqlalchemy 没有效果的问题

时间:2025-04-08 10:48:55

Flask sqlalchemy 没有效果的问题

在对数据库进行更新某条数据时,发现()没有效果,但是做调试能把赋值都正常打印出来,程序也不报错。

cur_file = FileStatus.query.filter_by(file_name='xxx').first()
cur_file.file_name = 'abc'
cur_file.size = 100000
print(cur_file.file_name)
print(cur_file.size)
db.session.commit() 

当时的代码大致如上,用取出一条数据,对数据的属性进行修改,最后commit。但是运行后,数据库中并没有被更新。

在阅读flask-sqlalchemy和sqlalchemy相关协议后,发现使用类似.filter_by(file_name=‘xxx’).first()的查询,返回的是一个对象的副本,所以对它进行修改只能在当前程序运行中有效,程序运行完毕,数据还是原来的样子,并没有被更新。

正确的做法应该是:
cur_file = (FileStatus).filter_by(file_name=‘xxx’).first()
这样得到的对象不是副本,对它的修改能以UPDATE的形式更新到数据库。

另外还有遇到不一致的问题,我的解决办法是首先检测是不是写了多个db = SQLAlchemy(app), 然后保持在一个函数中只commit一次就没有报错了。
另外也可以利用python上下文来保持session一致:
with as session_1: