Django 1.7 migrations - как очистить все миграции и начать с нуля?
Итак, я быстро итерации в приложении django на данный момент, и я постоянно настраиваю models.py. В течение дня или двух из программирования и тестирования я создаю пару десятков файлов миграции. Иногда я действительно разрываю схему и полностью переделываю ее. Это заставляет процесс миграции много жаловаться на значения по умолчанию и нулевые значения и так далее. Если возможно, я просто хотел бы поцарапать все материалы миграции и снова запустить миграцию, чтобы наконец узнать, что я делаю. До сих пор мой подход заключался в следующем:
- удалить все в папке миграции, кроме
__init__.py
.
- зайдите в мою консоль PostgreSQL и выполните:
DELETE FROM south_migrationhistory WHERE app_name='my_app';
- а на консоли PostgreSQL удалите все таблицы, связанные с my_app.
- re-run
./manage.py makemigrations my_app
- это создает файл 0001_initial.py
в моей папке переноса.
- run
./manage migrate my_app
- Я ожидаю, что эта команда заново построит все мои таблицы, но вместо этого она говорит: "Никаких миграций для применения".
Что дает?
Кроме того, теперь находится таблица таблиц south_migrationhistory
, которую я сбросил на Юг и переключился на Django 1.7?
Спасибо.
Ответы
Ответ 1
Итак, пошаговый план, который я изложил в моем вопросе, действительно работает, но вместо удаления строк из таблицы базы данных south_migrationhistory
мне пришлось удалять строки из таблицы базы данных django_migrations
.
Команда: DELETE FROM django_migrations WHERE app='my_app'
Как только это будет сделано, вы сможете перезапустить свои миграции с нуля.
Ответ 2
Я просто хотел поместить все шаги в командный формат:
ПРИМЕЧАНИЕ. Приведенные ниже команды довольно разрушительны, это означает start from scratch
, как запросил OP.
После комментария от mikeb
я подумал добавить эту строку:
PRE - ПРОВЕРЬТЕ, ЧТО ФАЙЛЫ ВЫ УДАЛИТЬ
find . -path *migrations* -name "*.py" -not -path "*__init__*"
Затем отрегулируйте команду на шаге 1
до той, которая работает для вашей среды dev.
- удалить все миграции из всех приложений:
find . -path *migrations* -name "*.py" -not -path "*__init__*" -exec rm {} \; # make sure to be in your projects path
- воссоздайте всю базу данных:
sudo -u postgres bash -c "psql -c \"DROP DATABASE rootedin;\""
sudo -u postgres bash -c "psql -c \"CREATE DATABASE rootedin;\""
sudo -u postgres bash -c "psql -c \"GRANT ALL PRIVILEGES ON DATABASE rootedin to vagrant;\"" # vagrant is my current user
- обновите свой db:
python3 manage.py makemigrations
python3 manage.py migrate