Уровень изоляции транзакций Django в mysql и postgresql - PullRequest
4 голосов
/ 17 февраля 2010

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

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

Ответы [ 5 ]

9 голосов
/ 02 декабря 2010

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

DATABASE_OPTIONS = { "init_command": "SET storage_engine=INNODB, SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED", }
3 голосов
/ 08 марта 2010

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

1 голос
/ 30 июля 2010

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

0 голосов
/ 01 мая 2019

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

Вы добавляете уровень изоляции: «read uncommitted» в «OPTIONS» для конфигурации соединения с базой данных.

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

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

0 голосов
/ 08 июля 2013

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

DATABASES = {
    'default': {
        (...)
        'OPTIONS': {
            (...),
            "init_command": "SET storage_engine=INNODB, SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED"
        },
     }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...