gpt4 book ai didi

python - Django 原子请求是如何工作的?

转载 作者:太空狗 更新时间:2023-10-29 17:23:25 24 4
gpt4 key购买 nike

我希望我的 Django View 是原子的。我的意思是,如果 View 中有 2 个数据库写入,我想要 0 个写入,或者 2 个写入。

例如:

def test_view(request):
''' A test view from views.py '''

MyClass.objects.create()
raise Exception("whatever")
MyClass.objects.create()

我在文档中发现的内容似乎很有希望:

A common way to handle transactions on the web is to wrap each request in a transaction. Set ATOMIC_REQUESTS to True in the configuration of each database for which you want to enable this behavior.

It works like this. Before calling a view function, Django starts a transaction. If the response is produced without problems, Django commits the transaction. If the view produces an exception, Django rolls back the transaction.

但是,即使我设置了 ATOMIC_REQUESTS = True,在调用 test_view() 时,也会创建第一个 MyClass 对象!我错过了什么?

注意:我使用的是 Django 1.7

最佳答案

ATOMIC_REQUESTS 是数据库连接设置字典的一个属性,不是顶级设置。所以,例如:

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'mydatabase',
'USER': 'mydatabaseuser',
'PASSWORD': 'mypassword',
'HOST': '127.0.0.1',
'PORT': '5432',
'ATOMIC_REQUESTS': True,
}
}

关于python - Django 原子请求是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27346003/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com