Django 嵌套 Transaction.atomic

Django nested Transaction.atomic

通过阅读文档:https://docs.djangoproject.com/en/dev/topics/db/transactions/#django.db.transaction.atomic

我知道

atomic blocks can be nested. In this case, when an inner block completes successfully, its effects can still be rolled back if an exception is raised in the outer block at a later point.

但是,我的问题是对于如下代码结构:

@transaction.atomic
def A():
    ## something
    B()
    C()
    ## something

@transaction.atomic
def B(): 
    ## something

@transaction.atomic
def C():
    ## something

如果B和C都成功了,A在他们之后出错了,那么B和C会马上回来,对吧?

如果 B 成功了,但 C 搞砸了,B 会回滚吗?

关于维护这个回滚功能的内存占用,上面的和下面的有什么区别吗:

@transaction.atomic
def A():
    B()
    C()

def B():
    ## something
def C():
    ## something 

我知道这两个结构处理不同的情况。我只是问,假设他们都成功(完全),内存使用级别有什么区别?

提前致谢。

If B and C both succeed, and A goes wrong after them, then B and C will right back, right?

是的,将回滚整个事务 A,包括 B 和 C。

What if B succeed, but C messed up, will B get roll back?

同样,整个事务 A 将被回滚,包括 B 和 C。

我不能说内存使用量是多少。这将取决于您的数据库引擎和您使用的代码 运行。除非您正在处理非常大的数据集,否则我不会担心。如果您使用的是非常大的数据集,请进行实验!