使用Flask-SQLAlcheme无法查询到手动更改的数据库最新值的问题

在业务开发中,遇到这样一个问题
在一个线程中,批量对表Table进行修改,步骤如下:

1. 查询每条数据a;
2. 修改数据a;
3. commit提交;
4. 再查询了一遍修改后的a数据;

后来发现,在先执行过一遍上述流程后,使用navicat修改Table表a的数据,但是该批量操作中,步骤1查询到的数据a仍然是未修改过的数据

问题可以精简为如下情况:

flask shell:
#1. 查询数据
user = Users.query.filter(Users.id==1).first()
print(user.name) # 输出: 小张

# 2. 使用navicat修改id=1的数据为 小王
# 3. 重新查询数据
user = Users.query.filter(Users.id==1).first()
print(user.name) # 输出的仍然是 小张

原因: sqlalcheme中的session会缓存之前的查询结果,直至发生commit

我最开始的问题,在于将数据commit后,重新查询了一遍数据,使得session缓存了数据,之后修改数据后重新查询时,使用的会是缓存.

解决方案: 优化查询步骤,将其放到commit之前

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容