Проблема с установкой Юга на существующую базу данных.MySql не поддерживает «операторы, изменяющие схему» - PullRequest
4 голосов
/ 13 июля 2011

У меня есть проект django с существующим БД, который я действительно хотел бы избежать сброса или прерывания. Я пытаюсь установить South, но при запуске первоначальной миграции python manage.py migrate example появляется следующая ошибка:

Running migrations for example:
- Migrating forwards to 0001_initial.
> example:0001_initial
! Error found during real run of migration! Aborting.

! Since you have a database that does not support running
! schema-altering statements in transactions, we have had 
! to leave it in an interim state between migrations.

! You *might* be able to recover with:   = DROP TABLE `example_page` CASCADE; []
= DROP TABLE `example_likebydate` CASCADE; []
= DROP TABLE `example_followbydate` CASCADE; []

! The South developers regret this has happened, and would
! like to gently persuade you to consider a slightly
! easier-to-deal-with DBMS.
! NOTE: The error which caused the migration to fail is further up.
Traceback (most recent call last):

...

File "/usr/local/lib/python2.7/site-packages/MySQLdb/connections.py", line 36, in defaulterrorhandler
raise errorclass, errorvalue
_mysql_exceptions.OperationalError: (1050, "Table 'example_page' already exists")

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

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

1 Ответ

8 голосов
/ 13 июля 2011

Если ваша схема уже обновлена ​​с models.py, который использовался для создания 0001_inital.py, тогда вы должны запустить первоначальную миграцию с --fake, чтобы по существу сказать югу, что вы уже находитесь в версии 0001 схемы.

...