有人可以告诉我 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/