Как удалить миграцию?
Случайно сделал неудачную миграцию и теперь не знаю как ее удалить. 🙁 Т.е. как бы миграция еще не прошла, я только сделал makemigrations. Оно миграцию создало, но при вызове migrate выкинуло ошибку (полю даты случайно пустую строку по умолчанию задал). Я ее исправил и сделал снова makemigrations и migrate, но оно теперь продолжает на команде migrate ругаться на ту ошибку. Как откатить ту миграцию?
- Вопрос задан более трёх лет назад
- 2763 просмотра
8 комментариев
Оценить 8 комментариев
Как исправить миграцию
В этой статье будем исправлять ошибки при миграциях. Если вы не знаете, что это, вот статья о миграциях.
Если вы меняли модель данных, ошиблись, но уже успели запустить makemigrations , то ситуация делится на 2 случая: если вы уже запустили migrate с этой миграцией и если вы ещё этого не сделали.
Если ещё не запустили migrate
В таком случае, миграция появилась только как файл в папке migrations/ . Найдите файл этой миграции (скорее всего, он будет последним по номеру), и удалите его.
После этого возвращайтесь к переписыванию моделей, как будто ничего небыло. Новый вызов makemigrations создаст новую миграцию взамен старой.
Если вы уже запустили migrate
В таком случае миграция уже попала в базу данных, и извлечь её сложнее. Самый простой и варварский способ — это удалить файл последней миграции, как в предыдущем случае, а потом вдобавок удалить и базу данных (обычно это файл db.sqlite3 в корне проекта).
После этого можно переходить к переписыванию моделей. Повторный запуск migrate создаст новую базу данных, к которой применится уже новая миграция.
Если вы работаете вместе с другими программистами, никогда так не делайте, потому что это вызовет у них большие проблемы: им тоже придётся удалять свои базы данных. Но если вы в проекте один, а в базе данных нет ничего важного — это хороший способ быстро всё исправить.
Если вы дорожите базой данных
Вот неплохой ответ на StackOverflow как отменить миграцию. Там же вы найдёте много других полезных советов. Этот вариант не для новичков, так что аккуратней с ним. Если вы используете тестовую базу данных, в которой нет ничего важного — проще воспользоваться предыдущим советом и удалить базу данных.
Что читать дальше
Если у вас ошибка You are trying to add a non-nullable field without a default, то вот статья как её исправить.
Попробуйте бесплатные уроки по Python
Получите крутое код-ревью от практикующих программистов с разбором ошибок и рекомендациями, на что обратить внимание — бесплатно.
Переходите на страницу учебных модулей «Девмана» и выбирайте тему.
Как удалять миграции в Laravel
Если вы случайно создали файл миграции с не правильным именем (команда php artisan migrate:make ) и хотите её удалить то:
Если комаина php artisan migrate не выполнена
- Вручную удаляете с диска файл миграции app/database/migrations/my_migration_file_name.php
- Обновляете файл composer autoload командой: composer dump-autoload
- Готово
Если комаина php artisan migrate выполнена
b) Если migrate:rollback не сработала, тогда делаете откат руками:
- Вручную удаляете с диска файл миграции app/database/migrations/my_migration_file_name.php
- Обновляете файл composer autoload командой: composer dump-autoload
- Изменяете базу данных, удаляя последнюю запись из таблицы миграции
Личный блог Семёна Гавриленко
Отмена последней миграции в Python

Иногда в процессе работы над проектом на языке программирования Python появляется необходимость отменить последнюю миграцию. Например, это может быть актуально при добавлении новой таблицы, которая в последствии оказалась ненужной, и возникла потребность в ее удалении без создания новой миграции.
Существует команда, которая позволяет отменить последнюю миграцию, и после ее применения можно просто удалить файл миграции. В Django, одном из самых популярных фреймворков Python, эту операцию можно выполнить при помощи команды migrate .
Пример отмены последней миграции
Предположим, была произведена миграция с именем 0004_add_new_table . Для ее отмены необходимо ввести следующую команду в командной строке:
python manage.py migrate app_name 0003_previous_migration
В этом примере app_name — это имя приложения, для которого была выполнена миграция, а 0003_previous_migration — это имя предыдущей миграции, до которой необходимо откатиться.
Удаление файла миграции
После отмены миграции файл с ней можно просто удалить из каталога миграций.
rm app_name/migrations/0004_add_new_table.py
В этом примере команда rm служит для удаления файла, а app_name/migrations/0004_add_new_table.py — это путь к файлу миграции.
Важно помнить, что откат миграции и удаление файла с ней — это не одно и то же. Откат миграции влияет на состояние базы данных, а удаление файла приводит к тому, что эта миграция больше не будет доступна для использования.