Python Django原子请求是如何工作的?
我希望我的Django视图是原子的。我的意思是,如果视图中有2个DB写入,我想要0个写入,或者2个写入 例如:Python Django原子请求是如何工作的?,python,django,atomic,django-database,Python,Django,Atomic,Django Database,我希望我的Django视图是原子的。我的意思是,如果视图中有2个DB写入,我想要0个写入,或者2个写入 例如: def test_view(request): ''' A test view from views.py ''' MyClass.objects.create() raise Exception("whatever") MyClass.objects.create() DATABASES = { 'default': { '
def test_view(request):
''' A test view from views.py '''
MyClass.objects.create()
raise Exception("whatever")
MyClass.objects.create()
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'mydatabase',
'USER': 'mydatabaseuser',
'PASSWORD': 'mypassword',
'HOST': '127.0.0.1',
'PORT': '5432',
'ATOMIC_REQUESTS': True,
}
}
我在文档中发现的内容似乎很有希望:
在web上处理事务的一种常见方法是包装每个请求
在交易中。在的配置中将原子_请求设置为True
要为其启用此行为的每个数据库
它是这样工作的。在调用视图函数之前,Django启动
交易如果生成的响应没有问题,Django
提交事务。如果视图生成异常,Django
回滚事务
但是,即使我设置了ATOMIC\u REQUESTS=True
,当调用test\u view()
时,也会创建第一个MyClass对象!我错过了什么
注意:我正在使用Django 1.7,原子_请求是数据库连接设置dict的一个属性,而不是顶级设置。例如:
def test_view(request):
''' A test view from views.py '''
MyClass.objects.create()
raise Exception("whatever")
MyClass.objects.create()
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'mydatabase',
'USER': 'mydatabaseuser',
'PASSWORD': 'mypassword',
'HOST': '127.0.0.1',
'PORT': '5432',
'ATOMIC_REQUESTS': True,
}
}
您在哪里设置了
原子请求
值?什么是自动提交
值?