【问题标题】:SQLAlchemy: Should I commit an update between two queries?SQLAlchemy:我应该在两个查询之间提交更新吗?
【发布时间】:2019-09-12 02:06:56
【问题描述】:

在单个会话中,如果我想:

// make a query on Foo table to get one instance
// update this instance
// commit() or not?
// make the same query on Foo table

我会在这两个查询中得到相同的结果吗?也就是说,是否需要在单个会话中对表进行查询之前提交更新?

谢谢!

【问题讨论】:

标签: database sqlalchemy transactions


【解决方案1】:

在再次进行查询之前不必提交。作为一般原则,事务(会话)中的更新将对同一事务中的后续查询可见,甚至在提交之前也是如此。

话虽如此,在一个事务中执行两次完全相同的查询可能是“代码异味”。值得考虑一下,既然更新的对象已经是内存了,是否真的需要再次查询该对象?

另外,根据database isolation level,第二个查询不能保证返回与第一个相同的结果集。如果另一个事务在第二个查询之前修改了数据,就会发生这种情况。

【讨论】:

    【解决方案2】:

    不必同时进行两次提交,因为每个事务对数据库中的后续操作(或查询)都是可见的。

    你可以把提交放在最后,虽然我不确定多次提交是否会影响运行时。

    【讨论】:

      猜你喜欢
      • 2023-04-06
      • 1970-01-01
      • 2014-06-18
      • 1970-01-01
      • 2011-06-26
      • 1970-01-01
      • 2016-04-24
      • 1970-01-01
      • 2010-11-14
      相关资源
      最近更新 更多