Что такое миграции в Django и как они работают

Ответ

Миграции в Django — это система контроля версий для схемы вашей базы данных. Они позволяют эволюционно изменять модели и автоматически применять эти изменения к БД, сохраняя при этом данные.

Основной принцип работы:

  1. Изменение моделей: Вы вносите изменения в файл models.py (например, добавляете новое поле).
  2. Создание миграции: Команда python manage.py makemigrations анализирует изменения и генерирует файл миграции — Python-код, описывающий, как перейти от старого состояния схемы к новому.
  3. Применение миграции: Команда python manage.py migrate выполняет код из файла миграции, изменяя структуру таблиц в базе данных.

Django отслеживает примененные миграции в специальной таблице django_migrations.

Пример:

Допустим, у нас есть модель Project:

# myapp/models.py
from django.db import models

class Project(models.Model):
    name = models.CharField(max_length=200)

Теперь добавим поле deadline:

# myapp/models.py
from django.db import models

class Project(models.Model):
    name = models.CharField(max_length=200)
    deadline = models.DateField(null=True, blank=True) # Новое поле

Выполняем команды в терминале:

# 1. Создаем файл миграции (например, 0002_project_deadline.py)
python manage.py makemigrations myapp

# 2. Применяем миграцию к базе данных
python manage.py migrate myapp

Ключевые преимущества:

  • Надежность: Изменения схемы версионируются и применяются последовательно.
  • Командная работа: Все разработчики работают с единой историей изменений схемы БД.
  • Автоматизация: Не нужно писать SQL-запросы вручную для изменения таблиц.