Я хотел очистить таблицу в моей БД, поэтому я уронил таблицу. Обычно я делал manage.py syncdb
, чтобы воссоздать его. Тем не менее, ответ здесь говорит, что больше не использовать syncdb
. Итак, что я делаю вместо этого?
Как восстановить упавшую таблицу с django-south?
Ответ 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
, а Юг должен снова добавить таблицу обратно в вашу базу данных... с столбцами и т.д., но без данных, очевидно.:)