有人能告诉我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()另外,在Django1.7中我们需要transaction.autocommit()吗?据我所知,Django只在自动提交模式下执行db操作。如果我说错了,请纠正我
发布于 2015-12-28 21:53:52
Django的默认行为是在自动提交模式下运行。除非有事务处于活动状态,否则每个查询都会立即提交到数据库。这意味着如果在一个视图函数中有两个delete操作和一个update操作,那么将一个接一个地运行,如果最后一个操作失败,则对数据库执行两个第一个操作。
使用激活事务修饰视图函数
@transaction.atomic在这种模式下,在任何数据库操作(update,delete,insert)之前,django将启动一个事务,当一切正常时,事务将是commited,否则将是rollbacked。
考虑下面这段代码:
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/
https://stackoverflow.com/questions/34492259
复制相似问题