最近在写项目时,发现修改完数据第二次查询时数据并没有更新,数据还和第一次一致,最开始以为是浏览器缓存的问题,清除缓存之后发现问题并没有解决想到可能是orm缓存问题。
当我们进行查询操作时,SQLAlchemy会帮我们把查询到的数据状态更改为持久态。
当我们谈论数据过期时,我们通常谈论的是处于持久状态的对象。例如,如果我们按如下方式加载一个对象:
user = session.query(User).filter_by(name='user1').first()
上述User
对象是持久的,并且存在一系列属性;如果我们查看它的内部__dict__
,我们会看到该状态已加载:
>>>user.__dict__ { 'id': 1, 'name': u'user1', '_sa_instance_state': <...>, }
可以使用 expire 清除持久态
session.expire(user)Session.expire_all()
方法允许我们一次调用Session.expire()
包含在其中的所有对象Session
可以看看下边几个方法都可以帮助我们清除持久态获取最新数据
Session.expire()
Query.populate_existing()
欢迎关注博客,共同进步!