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

Как восстановить упавшую таблицу с django-south?

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

4b9b3361

Ответ 1

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

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

python manage.py migrate appname zero

Но если вы бросили их вручную в db, пусть юг знает об этом

python manage.py migrate appname zero --fake

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

python manage.py migrate appname

Ответ 2

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

  • комментарий "юг" от INSTALLED_APPS
  • запустить manage.py syncdb
  • uncomment "south" в INSTALLED_APPS
  • выполнить команду manage.py migrate

Voila!

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

Ответ 3

Hmm этот обмен охватывает мой вопрос:

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

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

Ответ 4

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

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

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

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

Ответ 5

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

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