Вы знаете уровень изоляции транзакций, используемых в Django по умолчанию? Можно ли установить уровень изоляции в базе данных независимо?
Меня в основном интересуют mysql и postgres.
Вы знаете уровень изоляции транзакций, используемых в Django по умолчанию? Можно ли установить уровень изоляции в базе данных независимо?
Меня в основном интересуют mysql и postgres.
Вы также можете изменить это для каждого клиента / сеанса, используя параметры базы данных django, например:
DATABASE_OPTIONS = { "init_command": "SET storage_engine=INNODB, SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED", }
SET storage_engine=INNODB; SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
- person soulseekah; 12.01.2016
Уровень изоляции не изменяется драйверами mysql, поэтому он зависит от уровня изоляции сервера по умолчанию.
На данный момент django не устанавливает уровень изоляции. Это ошибка, потому что django не работает должным образом с более высоким уровнем изоляции, чем READ COMMITTED. Но MySQL по умолчанию использует REPEATABLE READ. Планируется добавить параметр для установки уровня изоляции (# 14026) и обсудить установка READ COMMITTED по умолчанию (# 13906). Я также написал подробную статью о транзакциях MySQL и django.
(Извините, я не могу комментировать Danhip) Это решение было задано для меня (mySQL), я добавил код Питера в поле DATABASE:
DATABASES = {
'default': {
(...)
'OPTIONS': {
(...),
"init_command": "SET storage_engine=INNODB, SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED"
},
}
}
если вы хотите использовать уровень изоляции чтения без фиксации.
вы добавляете «уровень_изоляции»: «чтение незафиксировано» в «ОПЦИИ» в конфигурации соединения с базой данных.
DATABASES = {
'read-uncommited': {
'OPTIONS': {
'isolation_level': 'read uncommitted'
},
},
}
вы можете найти на странице https://docs.djangoproject.com/en/2.1/ref/databases/