Django嵌套事务 - “with transaction.atomic()”

时间:2014-02-25 10:57:07

标签: django transactions nested atomic

我想知道我是否有这样的事情:

def functionA():
    with transaction.atomic():
        #save something
        functionB()

def functionB():
    with transaction.atomic():
        #save another thing

有人知道会发生什么?如果functionB失败,functionA也会回滚吗?

谢谢!

1 个答案:

答案 0 :(得分:34)

是的,它会的。无论嵌套如何,如果异常it will roll back退出原子块:

  

如果代码块成功完成,则更改将提交到数据库。如果存在异常,则会回滚更改。

另请注意,外部块中的异常将导致内部块回滚,并且可以捕获内部块中的异常以防止外部块回滚。该文档解决了这些问题。 (或者请参阅here以获取有关嵌套事务的更全面的后续问题。)