как восстановить упавшую таблицу с django-south? - PullRequest
20 голосов
/ 16 марта 2011

Я хотел очистить таблицу в моей БД, поэтому я ее отбросил. Обычно я бы сделал manage.py syncdb, чтобы воссоздать его. Однако, ответ здесь говорит, что больше не следует использовать syncdb. Итак, что мне делать вместо этого?

Ответы [ 5 ]

39 голосов
/ 23 ноября 2012

Это довольно поздний ответ, но для людей, которые столкнутся с той же проблемой (как я).

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

python manage.py migrate appname zero

Но если вы уронили их вручную в БД, сообщите об этом югу

python manage.py migrate appname zero --fake

И, конечно, для воссоздания таблиц

python manage.py migrate appname
27 голосов
/ 26 августа 2011

Была такая же проблема. Не уверен, что это работает при любых обстоятельствах, но вот что я сделал:

  1. комментарий "юг" из INSTALLED_APPS
  2. запустите manage.py syncdb
  3. раскомментировать "юг" в INSTALLED_APPS
  4. run manage.py migrate

Voila!

Ваш пробег может варьироваться ....

2 голосов
/ 16 марта 2011

Хмм этот обмен покрывает мой вопрос:

Если вы измените базу данных вручную, Юг не заметит - это единственный способ отследить, какую версиюБаза данных - это таблица south_migrationhistory, поэтому, если вы возитесь за ее спиной, вы несете ответственность за ее исправление.

В итоге я закомментировал модель, которую я отбросил, выполняя schemamigration, создав пустую таблицу без столбцов той, которую я отбросил (так что Югу есть что отбросить), migrate ing, затем без комментариев модели, schemamigration и migrate ing снова.Немного раздражает больше, чем просто бросить стол и syncdb, ну да ладно.

1 голос
/ 29 июня 2013

Убедитесь, что все ваши миграции применяются: python manage.py migrate

Скажите Django, чтобы они создавали таблицы в том виде, в каком они есть в ваших моделях: python manage.py syncdb

Скажите Югу, что все там, где оно должноbe: python manage.py migrate appname --fake

Это предполагает, что ничего не изменилось в любой из ваших моделей с момента создания вашей последней миграции.

0 голосов
/ 23 ноября 2013

Я знаю, что эта проблема старая, но я столкнулся с этой проблемой и подумал, что опубликую свое решение на случай, если это кому-нибудь поможет.

  1. Перейдите в папку models.py, где находится база данных.is.
  2. Вырезать весь класс из файла models.py.
  3. Запустить ./manage.py schemamigration appname --auto (это создаст другую миграцию, где South будетпризнать, чтобы удалить эту таблицу).Вам может потребоваться воссоздать пустую таблицу в вашей базе данных, чтобы South ее увидел.
  4. Запустите migration, и таблица будет удалена из вашей базы данных.
  5. Повторно вставьте в вашу таблицувернитесь туда, где он был в вашем models.py файле.
  6. Запустите ./manage.py schemamigration appname --auto.Юг должен взять таблицу и позволить вам перенести
  7. Запустить ./manage.py migrate appname, а Юг должен снова добавить таблицу обратно в ваш блок данных ... с колонками и так далее, нобез данных, очевидно.:)
...