Python Django видит старые миграции, но все было удалено
Я очистил все свои базы данных, даже создал новую с другим именем, удалил все миграции и папки миграций в каждом приложении моего проекта django, очистил все образы, контейнеры, тома и сборки в моем Docker. Но когда я запускаю
python manage.py showmigrations
он показывает мне мои старые миграции, но я понятия не имею, где он их находит, потому что я удалил все, что мог.
и когда я запускаю
python manage.py makemigrations
он возвращает мне сообщение «Изменения не обнаружены»
Я даже изменил имя базы данных на новое.
Я удалил все и просто хотел начать с нуля, но почему-то он находит старые миграции, которых даже не существует. введите описание изображения здесь
удалите все файлы миграции (кроме init.py)
затем очистите кэш (выполните эту команду в терминале, где находится ваш проект django)
find . -path "*/__pycache__/*" -delete
Откажитесь от базы данных и пересоздайте ее, если это необходимо
Перезагрузка среды Docker
тогда сделайте миграцию
python manage.py makemigrations
python manage.py migrate
Django сохраняет таблицу в базе данных вместе с миграциями, вы можете удалить эту таблицу, но предварительно изучите ее, чтобы быть уверенным в том, что вы делаете.
Django использует таблицу базы данных django_migrations
для хранения информации о миграциях. Если python manage.py showmigrations
все еще показывает миграции после того, как вы удалили базу данных, вы можете проверить следующее:
- Возможно, вы сбросили другую базу данных
- Возможно, таблица
django_migrations
находится в другой базе данных (дублированные базы данных или другие странные вещи) - Какая-то проблема с кэшированием, как уже говорилось, удалите
*.pyc __pycache__
файлы
Вы также можете попробовать сымитировать миграцию. Если база данных на самом деле не была сброшена, вы получите ошибки. Это будет подтверждением того, что база данных была сброшена неправильно.
python manage.py migrate --fake <app_name> zero
Django хранит историю миграций в таблице djnago_migrations в DB, поэтому вы видите эту ошибку
Сначала удалите все миграции, для этого можно использовать следующую команду
find . -path "*/migrations/*.py" -not -name "__init__.py" -delete
Затем удалите django и снова установите его. После этого откройте оболочку python db и удалите таблицу migrations из DB, затем создайте новую свежую migrations, а затем migrate
python manage.py dbshell
DROP TABLE django_migrations;
python3 manage.py makemigrations
python3 manage.py migrate
Это самый эффективный способ, который я нашел, чтобы избавиться от этой ошибки. Примечание Просто будьте осторожны, делая это, сначала сделайте резервную копию вашей БД, прежде чем делать это