Уровень изоляции транзакции Django в mysql и postgresql

Вы знаете уровень изоляции транзакций, используемых в Django по умолчанию? Можно ли установить уровень изоляции в базе данных независимо?

Меня в основном интересуют mysql и postgres.


person Piotr Czapla    schedule 17.02.2010    source источник


Ответы (5)


Вы также можете изменить это для каждого клиента / сеанса, используя параметры базы данных django, например:

DATABASE_OPTIONS = { "init_command": "SET storage_engine=INNODB, SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED", }
person Peter Lundberg    schedule 02.12.2010
comment
Кто-нибудь может подтвердить, что это работает? У меня проблемы с повторяющимся чтением: stackoverflow.com/questions/2235318/ - person dani herrera; 20.03.2012
comment
@danihp определенно запускается, хотя синтаксис отключен. Вместо этого я использую SET storage_engine=INNODB; SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED; - person soulseekah; 12.01.2016

Уровень изоляции не изменяется драйверами mysql, поэтому он зависит от уровня изоляции сервера по умолчанию.

person Piotr Czapla    schedule 08.03.2010

На данный момент django не устанавливает уровень изоляции. Это ошибка, потому что django не работает должным образом с более высоким уровнем изоляции, чем READ COMMITTED. Но MySQL по умолчанию использует REPEATABLE READ. Планируется добавить параметр для установки уровня изоляции (# 14026) и обсудить установка READ COMMITTED по умолчанию (# 13906). Я также написал подробную статью о транзакциях MySQL и django.

person Sebastian Noack    schedule 30.07.2010
comment
Спасибо, но блог, на который вы указали, кажется частным. Не могли бы вы открыть эту статью или скопировать / вставить сюда? - person Evgeny; 15.06.2013
comment
Не могли бы вы процитировать некоторую информацию или подробно рассказать о том, что django не работает должным образом с более высоким уровнем изоляции, чем READ COMMITTED. - person Evgeny; 15.06.2013
comment
@ Себастьян Ноак В статье говорится: «Требуется разрешение»? - person Dhiraj Thakur; 22.08.2013
comment
Я нашел эту статью, которая относится к этой частной статье и на самом деле имеет контент, который вы можете прочитать: ewencp.org/blog/django-and-mysql-isolation-levels - person JeromeParadis; 15.11.2013
comment
Я считаю, что это связано с тем, как Django имитировал автоматическую фиксацию вместо использования автоматической фиксации на уровне базы данных. Это было исправлено в Django 1.6: docs.djangoproject.com /en/1.6/topics/db/transactions/ - person user193130; 07.03.2014

(Извините, я не могу комментировать Danhip) Это решение было задано для меня (mySQL), я добавил код Питера в поле DATABASE:

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

если вы хотите использовать уровень изоляции чтения без фиксации.

вы добавляете «уровень_изоляции»: «чтение незафиксировано» в «ОПЦИИ» в конфигурации соединения с базой данных.

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

вы можете найти на странице https://docs.djangoproject.com/en/2.1/ref/databases/

person Doosik Bae    schedule 01.05.2019