我说:
with my_connection:
o.first_call()
其中my_connection
' __exit__
方法要求回滚
o.first_call
中的和j.second_call
,它本身调用z.third_call
。假设z.third_call
已成功将记录插入数据库,j.second_call
也成功插入记录,但o.first_call
疯了。在我第一次进入my_connection的上下文之前,我是否会回滚到状态,还是会回滚到o.first_call
和j.second_call
之间的状态?
编辑:要清楚,我希望在我打电话给o.first_call
EDIT2:我希望我能在__enter__
做一些魔术,某种情况可以说,看看所谓的是一个大事。
答案 0 :(得分:1)
交易将回滚到最后一次commit
电话。
每Database API Specification v2.0:
.commit()
将任何待处理的事务提交到数据库。
.rollback()
...导致数据库回滚到任何一个的开头 待处理的交易
所以这取决于“成功插入”的含义。如果通过调用commit
完成插入,则回滚将不会删除插入。但是,如果没有提交,则插入将被回滚。