SQLAlchemy可以缓存更新吗
我想使用SQLalchemy使用ORM接口更新一个可能很大的表中的行。但我有点不清楚 我的问题是,假设我有一个会话进行重复选择和一些更新,这些更新是发生在数据库中还是有时缓冲在某个ORM缓存对象中 例如,如果我正在使用一个会话重复一个select,该会话将产生10行,如下所示:SQLAlchemy可以缓存更新吗,sqlalchemy,Sqlalchemy,我想使用SQLalchemy使用ORM接口更新一个可能很大的表中的行。但我有点不清楚 我的问题是,假设我有一个会话进行重复选择和一些更新,这些更新是发生在数据库中还是有时缓冲在某个ORM缓存对象中 例如,如果我正在使用一个会话重复一个select,该会话将产生10行,如下所示: session.query('User').filter(User.val == 42, User.surname == 'Dent') 。。但我只更新了那10行的最后一行 ORM总是从DB中获取相同的10行还是使用缓
session.query('User').filter(User.val == 42, User.surname == 'Dent')
。。但我只更新了那10行的最后一行
现在还不清楚“使用缓存值进行更新”是什么意思,但我将尝试概括一下一般行为:
query = session.query(User).filter(...)
这对数据库没有任何作用。这构造了一个表示查询的查询对象
users = query.all()
# or
for user in query:
...
这将始终执行SELECT
查询,从数据库中获取行,将它们转换为内存中的对象,并将它们放入标识映射中。(这可能就是您所说的缓存。)
这记录了您想要将姓氏
列更新为“Bar”
,但实际上对数据库没有任何作用
session.flush()
session.commit()
这将向数据库发出UPDATE
查询
session.flush()
session.commit()
如果有任何挂起的更改,将进行刷新,发出一个COMMIT
查询,并且(默认情况下)将终止标识映射中的所有实例,以便执行user.namite
此时发出一个SELECT
查询(但仅针对该行,即SELECT…WHERE id=…
)