当session.flush()在SQLAlchemy上失败时,我应该调用回滚吗?

时间:2015-08-31 06:39:46

标签: python mysql postgresql sqlalchemy

我知道当session.commit()失败时调用回滚,例如try-except阻止 但是当session.flush()失败时,我应该执行rollback()吗?

try:
    session.flush()
except IntegrityError:
    session.rollback()

2 个答案:

答案 0 :(得分:3)

失败的同花顺总是回滚,你不需要自己动手:

http://docs.sqlalchemy.org/en/latest/orm/session_api.html#sqlalchemy.orm.session.Session.flush

数据库操作将在当前事务上下文中发出,并且不会影响事务的状态,除非发生错误,在这种情况下整个事务将回滚。您可以在事务中随意刷新()以将更改从Python移动到数据库的事务缓冲区。

答案 1 :(得分:1)

接受的答案并不完全正确。关于Session.flush()的文档对此有点误导。

失败后,事务(即数据库事务)将回滚(通过数据库)。根据文档1 2

,其python对象Session对象本身将处于“非活动”状态,并且

必须由调用的应用程序显式回滚,就像在没有发生故障的情况下必须显式提交一样。

它进一步承认

这是使用ORM时的常见错误