Миграция — файл с описанием изменений в схеме БД. Django отслеживает состояние моделей и генерирует SQL автоматически.
Рабочий процесс
# 1. Изменил модель в models.py
# 2. Создай файл миграции
python manage.py makemigrations
# 3. Примени к БД
python manage.py migrate
makemigrations — создание файла
python manage.py makemigrations # для всех приложений
python manage.py makemigrations tasks # только для tasks
python manage.py makemigrations --name add_priority # с именем
Создаёт файл вида tasks/migrations/0002_task_priority.py:
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [('tasks', '0001_initial')]
operations = [
migrations.AddField(
model_name='task',
name='priority',
field=models.IntegerField(default=0),
),
]
migrate — применение
python manage.py migrate # применить все
python manage.py migrate tasks # только приложение
python manage.py migrate tasks 0001 # откатить до версии
python manage.py migrate tasks zero # откатить всё
Статус миграций
python manage.py showmigrations
# [X] tasks.0001_initial ← применена
# [X] tasks.0002_task_priority
# [ ] tasks.0003_task_due_date ← ещё не применена
Что НЕ надо делать
# ❌ Не удаляй файлы миграций вручную
# ❌ Не редактируй применённые миграции
# ❌ Не называй поля зарезервированными словами SQL
squashmigrations — объединение миграций
# Объединить миграции 0001-0010 в одну
python manage.py squashmigrations tasks 0001 0010
Полезно когда накопилось много миграций. После сквоша старые файлы можно удалить (когда все среды обновлены).
💬 Комментарии (0)
Комментариев пока нет
Станьте первым, кто поделится мнением об этой статье!