首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django1.7中的transaction.autocommit

Django1.7中的transaction.autocommit
EN

Stack Overflow用户
提问于 2015-12-28 18:58:59
回答 1查看 1.2K关注 0票数 0

有人能告诉我transaction.autocommit()是做什么的吗?

下面的代码片段之间有什么区别?

代码语言:javascript
复制
model_object.save()

代码语言:javascript
复制
with transaction.autocommit():
     model_object.save()

代码语言:javascript
复制
with transaction.autocommit():
     model_object.save()

        with transaction.autocommit():
             model2_object.save()

     model3_object.save()

另外,在Django1.7中我们需要transaction.autocommit()吗?据我所知,Django只在自动提交模式下执行db操作。如果我说错了,请纠正我

EN

回答 1

Stack Overflow用户

发布于 2015-12-28 21:53:52

Django的默认行为是在自动提交模式下运行。除非有事务处于活动状态,否则每个查询都会立即提交到数据库。这意味着如果在一个视图函数中有两个delete操作和一个update操作,那么将一个接一个地运行,如果最后一个操作失败,则对数据库执行两个第一个操作。

使用激活事务修饰视图函数

代码语言:javascript
复制
@transaction.atomic

在这种模式下,在任何数据库操作(update,delete,insert)之前,django将启动一个事务,当一切正常时,事务将是commited,否则将是rollbacked

考虑下面这段代码:

代码语言:javascript
复制
from django.db import transaction

def viewfunc(request):
    # This code executes in autocommit mode (Django's default).
    do_stuff()

    with transaction.atomic():
        # This code executes inside a transaction.
        do_more_stuff()

上面的代码是在自动提交中执行部分view语句的另一种方式,其余的在事务模式下包含在with transaction.atomic()中。

下面的代码将执行相反的操作:

代码语言:javascript
复制
@transaction.atomic
def viewfunc(request):
    # This code executes in transactional mode
    do_stuff()

    with transaction.autocommit():
        # This code executes in autocommit mode (Django's default).
        do_more_stuff()

do_stuff()将在事务模式下运行,do_more_stuff()将在自动提交模式下运行

请参阅https://docs.djangoproject.com/en/1.9/topics/db/transactions/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34492259

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档