SQLAlchemy:我应该在两个查询之间提交更新吗?

时间:2019-04-22 22:27:13

标签: database sqlalchemy transactions

如果需要,在一个会话中

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

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

谢谢!

2 个答案:

答案 0 :(得分:1)

在再次进行查询之前不必提交。通常,事务(会话)中的更新对于同一事务中的后续查询(甚至在提交之前)都是可见的。

已经说过,在一个事务中两次执行相同的确切查询可能是“代码异味”。值得考虑的是,由于更新的对象已经是内存,是否真的有必要再次查询该对象?

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

答案 1 :(得分:1)

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

尽管我不确定多个提交是否会影响运行时,但您只能将提交放在最后。