您知道Django中使用的事务的默认隔离级别吗? 是否可以以独立于数据库的方式设置隔离级别?
我主要对mysql和postgres感兴趣。
答案 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'
},
},
}
中找到