5

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

我主要对mysql和postgres感兴趣。

4

5 回答 5

10

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

DATABASE_OPTIONS = { "init_command": "SET storage_engine=INNODB, SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED", }
于 2010-12-02T11:53:35.560 回答
5

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

于 2010-03-08T09:23:59.373 回答
3

目前 django 没有设置隔离级别。这是一个错误,因为 django 在任何高于 READ COMMITTED 的隔离级别下都无法正常工作。但是 MySQL 默认使用 REPEATABLE READ。有计划添加一个设置来设置隔离级别 ( #14026 ) 和关于将 READ COMMITTED 设为默认值的讨论 ( #13906 )。我还写了一篇关于MySQL 事务和 django的详细文章。

于 2010-07-30T09:06:32.023 回答
0

(对不起,我不能对 Danhip 发表评论)这个解决方案为我(mySQL)工作,我在 DATABASE 字段中添加了 Peter 的代码:

DATABASES = {
    'default': {
        (...)
        'OPTIONS': {
            (...),
            "init_command": "SET storage_engine=INNODB, SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED"
        },
     }
}
于 2013-07-08T15:27:58.410 回答
0

如果你想使用读取未提交的隔离级别。

您在 'OPTIONS on database connection configuration' 中添加 'isolation_level': 'read uncommitted'。

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

您可以从https://docs.djangoproject.com/en/2.1/ref/databases/找到

于 2019-05-01T16:14:52.110 回答