mysql中的Django事务隔离级别& PostgreSQL的

时间:2010-02-17 13:03:33

标签: django-models isolation-level

您知道Django中使用的事务的默认隔离级别吗? 是否可以以独立于数据库的方式设置隔离级别?

我主要对mysql和postgres感兴趣。

5 个答案:

答案 0 :(得分:9)

您还可以使用django数据库选项更改每个客户端/会话,如下所示:

DATABASE_OPTIONS = { "init_command": "SET storage_engine=INNODB, SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED", }

答案 1 :(得分:3)

mysql驱动程序不会更改隔离级别,因此它取决于服务器的默认隔离级别。

答案 2 :(得分:1)

目前django没有设置隔离级别。这是一个错误,因为django无法正常使用任何比READ COMMITTED更高的隔离级别。但MySQL默认使用REPEATABLE READ。有计划添加一个设置来设置隔离级别(#14026),并讨论如何使READ COMMITTED成为默认值(#13906)。我还写了一篇关于MySQL transactions and django的详细文章。

答案 3 :(得分:0)

(抱歉,我无法评论Danhip) 这个解决方案给了我(mySQL),我在DATABASE字段中添加了Peter的代码:

DATABASES = {
    'default': {
        (...)
        'OPTIONS': {
            (...),
            "init_command": "SET storage_engine=INNODB, SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED"
        },
     }
}

答案 4 :(得分:0)

如果要使用读取未提交隔离级别。

您在数据库连接配置的“ OPTIONS”中添加了“ isolation_level”:“未提交读”。

DATABASES = {
    'read-uncommited': {
        'OPTIONS': {
            'isolation_level': 'read uncommitted'
        },
    },
}

您可以在https://docs.djangoproject.com/en/2.1/ref/databases/

中找到