Подтвердить что ты не робот

Явно задайте механизм хранения таблицы MySQL с помощью South и Django

У меня возникает проблема, что Юг создает таблицу DB для новой модели как INNODB, когда я переношу, но создает таблицу как MYISAM, когда другой разработчик запускает собственную миграцию.

Проблема заключается в том, что все мои другие таблицы являются MYISAM, поэтому использование новых таблиц приводит к многочисленным ошибкам ограничения внешнего ключа.

Как я могу явно убедиться, что таблица создана с помощью MYISAM?

Что может быть причиной создания таблицы с использованием другого механизма хранения в разных средах?

4b9b3361

Ответ 1

Чтобы убедиться, что все миграции всегда выполняются с использованием INNODB, вы должны установить механизм хранения как INNODB в определении базы данных напрямую, например:

DATABASES = {
    'default': {
        ...
        'OPTIONS'  : { 'init_command' : 'SET storage_engine=INNODB', },
    }

Если вы используете MySQL 5.7.x и выше,

DATABASES = {
    'default': {
        ...
        'OPTIONS'  : { 'init_command' : 'SET default_storage_engine=INNODB', },
    }

Но вы должны знать, что он может иметь производительность. Таким образом, вы можете установить этот параметр только при выполнении миграции.

Ответ 2

Если вы используете Юг, вы можете установить STORAGE_ENGINE.

django < 1.2

# add to your settings file
DATABASE_STORAGE_ENGINE = 'INNODB' # django < 1.2

django >= 1.2

# add to your settings file
DATABASES = {
   'default': {
       ...
       'STORAGE_ENGINE': 'INNODB'
   }
}