sqlalchemy:每次提交都需要回滚吗?

lan*_*ng2 7 python mysql sqlalchemy

我正在为我的网络应用程序使用 SQLAlchemy。我见过很多这样的代码:

try:
   session.commit()
except:
   session.rollback()
Run Code Online (Sandbox Code Playgroud)

我想知道是否每个操作都需要它commit()。如果是,那为什么它不是操作的一部分commit()?如何决定何时做rollback()、何时不做?

szy*_*zym 5

当提交失败时,仅意味着事务无法在不破坏某些约束的情况下完成。因此原则上,您可以进行一些更新并尝试再次提交,而不是回滚。

在实践中,这种错误恢复逻辑很难推理,因此大多数人只是回滚(撤消对事务所做的任何更改)以保持数据处于一致状态,并将问题传达给用户。

  • 您可能想违反某些限制。也许最简单的事情就是将修改行的主键更改为不唯一(对于 INSERT)或不存在(对于 UPDATE)。 (2认同)