mysql - Django 1.7 中的 transaction.autocommit

标签 mysql django transactions

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

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

model_object.save()

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

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

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

     model3_object.save()

另外,Django 1.7 中我们需要 transaction.autocommit() 吗?据我了解,Django 仅在自动提交模式下执行数据库操作。如有错误请指正

最佳答案

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

激活交易装饰 View 功能

@transaction.atomic

在此模式下,在任何数据库操作(更新、删除、插入)之前,django 将启动一个事务,当一切正常时,事务将提交,否则将回滚.

考虑下面的代码:

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() 中。

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

@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/

关于mysql - Django 1.7 中的 transaction.autocommit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34492259/

相关文章:

mysql - 授予用户访问权限

django - ConnectionAbortedError - 如果 Celery 停止/失败或 Redis 未启动。我如何捕获/除此错误/

sql - 从两个 session (Oracle) 插入相同值的唯一列

mysql innodb 最大事务大小

mysql - 从另一个表更新表中的值

mysql - Crystal 郎 : can't compile App with MySQL library on OSX El Capitan

当我尝试获取 access_token 时,Python-social-auth 管道返回 TypeError

java - Spring - 管理restcontroller之间的事务

php - 从数据库获取 int,如果 int = 特定值,则执行某些操作。如果不做别的事

django - 从自定义模型继承时保留 ModelAdmin 属性(list_display 等)