gpt4 book ai didi

python - Django 嵌套 Transaction.atomic

转载 作者:太空狗 更新时间:2023-10-30 02:19:42 25 4
gpt4 key购买 nike

通过阅读文档: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。

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

关于python - Django 嵌套 Transaction.atomic,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27973586/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com