我想知道我是否有这样的事情:
def functionA():
with transaction.atomic():
#save something
functionB()
def functionB():
with transaction.atomic():
#save another thing
有人知道会发生什么?如果functionB失败,functionA也会回滚吗?
谢谢!
答案 0 :(得分:34)
是的,它会的。无论嵌套如何,如果异常it will roll back退出原子块:
如果代码块成功完成,则更改将提交到数据库。如果存在异常,则会回滚更改。
另请注意,外部块中的异常将导致内部块回滚,并且可以捕获内部块中的异常以防止外部块回滚。该文档解决了这些问题。 (或者请参阅here以获取有关嵌套事务的更全面的后续问题。)