Ответ
Django отслеживает примененные миграции с помощью специальной таблицы в базе данных под названием django_migrations.
Ключевые моменты:
-
Таблица
django_migrationsЭта таблица создается автоматически при первом запуске командыpython manage.py migrate. Она содержит запись для каждой успешно примененной миграции.Ее структура проста:
id: Первичный ключ.app: Название приложения, к которому относится миграция.name: Имя файла миграции (например,0001_initial).applied: Дата и время применения миграции.
-
Процесс работы команды
migrateКогда вы запускаетеpython manage.py migrate, Django выполняет следующие шаги:- Сканирует директории
migrations/всех приложений проекта и находит все файлы миграций. - Сравнивает найденный список миграций со списком миграций, записанных в таблице
django_migrations. - Определяет, какие миграции еще не были применены.
- Выполняет SQL-команды для каждой непримененной миграции в правильном порядке (учитывая зависимости).
- После успешного выполнения каждой миграции добавляет новую запись в таблицу
django_migrations.
- Сканирует директории
Практическая проверка статуса
Самый простой способ проверить, какие миграции применены, а какие нет — использовать команду showmigrations:
# Показать статус миграций для всех приложений
python manage.py showmigrations
# Показать статус для конкретного приложения
python manage.py showmigrations my_app
Вывод команды помечает примененные миграции символом [X]:
my_app
[X] 0001_initial
[X] 0002_add_price_field
[ ] 0003_add_tags
Таким образом, таблица django_migrations является единственным источником правды о состоянии схемы базы данных с точки зрения Django.