热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Django嵌套了Transaction.atomic

如何解决《Django嵌套了Transaction.atomic》经验,为你挑选了1个好方法。

通过阅读doc: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 

我知道这两种结构处理不同的情况.我只是问,假设它们都成功(完全),内存使用水平有什么不同?

提前致谢.



1> Alasdair..:

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

是的,整个交易A将被回滚,包括B和C.

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

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

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


推荐阅读
author-avatar
手机用户2602886175
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有