Обратная миграция с юга Джанго
Хорошо, это кажется очень глупым вопросом, и я уверен, что где-то что-то упускаю.
Как вы выполняете обратную миграцию, используя Юг на Django?
Итак, я изменил свои модели, создал миграцию с schemamigration
, запустил миграцию с migrate
, и теперь я понимаю, что это не совсем то, что я хотел, и я хочу, чтобы все было так, как раньше.
Если не считать ручного редактирования таблиц БД и удаления файлов миграции, то как мне откатить миграцию назад? Я найдите ссылки на обратные миграции, используя юг через Google, но еще не нашли надежного примера кода для него.
Может ли кто-нибудь помочь?
3 ответа:
Вам нужно вычислить номер миграции непосредственно перед тем, который вы хотите откатить.
Ваше приложение должно иметь каталог миграции с файлами в нем с именем
Обычно, когда вы запускаете0000_initial.py 0001_added_some_fields.py 0002_added_some_more_fields.py 0003_deleted_some_stuff.py
./manage.py migrate your_app
, Юг запускает все новые миграции, по порядку. (Он смотрит на таблицы базы данных, чтобы решить, какие из них являются "новыми").Однако вы также можете указать любую миграцию по номеру, и South перенесет вашу базу данных, вперед или назад , в доведите его до этой точки. Таким образом, в приведенном выше примере файлов, если вы уже перенесли до 0003, и вы хотите запустить 0003 в обратном порядке (отменяя его, эффективно), вы бы запустили
./manage.py migrate your_app 0002
Юг посмотрел бы на базу данных, понял, что она уже запустила 0003, и определил, что он должен выполнить обратную миграцию для 0003, чтобы вернуться к 0002.
Просто на случай, если кто-то (например, я) задастся вопросом, как мигрировать обратно из начальной версии (0001):
django-admin.py migrate some_app zero
Вывод:
Running migrations for some_app: - Migrating backwards to zero state. < some_app:0001_initial
"ноль" - это особое состояние перед любой миграцией.