Явно установите механизм хранения таблиц MySQL, используя South и Django - PullRequest
20 голосов
/ 11 марта 2011

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

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

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

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

Ответы [ 2 ]

23 голосов
/ 11 марта 2011

Чтобы быть уверенным, что все миграции всегда выполняются с использованием 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', },
    }

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

14 голосов
/ 26 августа 2011

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

Джанго <1,2 </strong>

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

Джанго> = 1,2

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