【发布时间】:2014-12-07 18:10:59
【问题描述】:
我希望我的 Django 视图是原子的。我的意思是,如果视图中有 2 次 DB 写入,我想要 0 次写入,或者 2 次写入。
例如:
def test_view(request):
''' A test view from views.py '''
MyClass.objects.create()
raise Exception("whatever")
MyClass.objects.create()
我在文档中发现的内容似乎很有希望:
在网络上处理事务的一种常用方法是包装每个请求 在一次交易中。在配置中将 ATOMIC_REQUESTS 设置为 True 您要为其启用此行为的每个数据库。
它是这样工作的。在调用视图函数之前,Django 会启动一个 交易。如果响应没有问题,Django 提交事务。如果视图产生异常,Django 回滚事务。
但是,即使我设置了ATOMIC_REQUESTS = True,当调用test_view() 时,第一个MyClass 对象也会被创建!我错过了什么?
注意:我使用的是 Django 1.7
【问题讨论】:
-
你在哪里设置
ATOMIC_REQUESTS值?AUTOCOMMIT的价值是什么?
标签: python django atomic django-database