Миграции alter_column терпят неудачу, меня это волнует?

Я перехожу от настройки модели профиля к расширению модели User. Я пытаюсь настроить миграцию на юг в соответствии с этим руководством. У меня есть несколько других моделей, которые ссылаются на модель User, и поэтому, когда я автоматически генерирую свою миграцию схемы, я получаю линии в соответствии с:

db.alter_column(u'app_model', 'user', 
  self.gf('django.db.models.fields.related.ForeignKey')(to=orm['app.user']))

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

FATAL ERROR - The following SQL query failed: INSERT INTO "_south_new_app_model" () SELECT  FROM "app_model";
The error was: near ")": syntax error
 ! 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:
 ! The South developers regret this has happened, and would
 ! like to gently persuade you to consider a slightly
 ! easier-to-deal-with DBMS (one that supports DDL transactions)
 ! NOTE: The error which caused the migration to fail is further up.
Error in migration: app:0018_auto__chg_field_model_user.py
DatabaseError: near ")": syntax error

Примечание: это миграция, созданная с ./manage.py schemamigration app --auto, Я не редактировал это.

Дело в том, меня это волнует? Тип ссылки, хранящейся в базе данных, тот же, и я сделал шаг по переименованию таблицы. Кажется, все продолжает работать, если я удаляю alter_table линии от миграции. Это ужасная, ужасная идея или все в порядке?

1 ответ

Sqlite3 является проблемой. Как вы можете видеть здесь, sqlite3 поддерживает только ограниченное подмножество alter table операции, так что вызывает South провалить миграцию. Если вам нужно сделать это, вам придется портировать тестовую базу данных на другой движок, который поддерживает alter table, Что я рекомендую, иногда миграции могут быть сложными, и вы можете подумать, что это работает, но всегда лучше проверить это.

Если вы думаете, что работает нормально, продолжайте и просто проигнорируйте ошибку, но будьте осторожны, возможно, она работает сейчас, но, возможно, миграция не удалась, и позже вы обнаружите странные ошибки, связанные с базой данных, в вашей среде разработки.

Другие вопросы по тегам