SQLAlchemy的“缓存”问题导致第二次查询数据和第一次一致

官方文档

最近在写项目时,发现修改完数据第二次查询时数据并没有更新,数据还和第一次一致,最开始以为是浏览器缓存的问题,清除缓存之后发现问题并没有解决想到可能是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()

Session.expire_all()

Session.refresh()

Query.populate_existing()

欢迎关注博客,共同进步!