【问题标题】:How Django atomic requests works?Django 原子请求是如何工作的?
【发布时间】: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


【解决方案1】:

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,
    }
}

【讨论】:

    猜你喜欢
    • 2016-07-01
    • 1970-01-01
    • 2017-03-02
    • 2010-11-16
    • 2014-01-16
    • 2020-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多