Какую роль играют операции (Operations) в миграциях Django?

Ответ

В системе миграций Django Operation — это класс, представляющий одно атомарное изменение схемы базы данных. Миграции состоят из списка таких операций, которые Django выполняет последовательно.

Основное назначение операций — обеспечить декларативность и независимость от СУБД. Вместо того чтобы писать SQL-запросы вручную, вы описываете что нужно сделать (создать модель, добавить поле), а Django сам генерирует корректный SQL для конкретной базы данных (PostgreSQL, MySQL, SQLite и т.д.).

Пример файла миграции:

# 0002_auto_20231027_1200.py
from django.db import migrations, models

class Migration(migrations.Migration):

    dependencies = [
        ('myapp', '0001_initial'),
    ]

    # Список операций, которые будут выполнены
    operations = [
        migrations.AddField(
            model_name='author',
            name='email',
            field=models.EmailField(max_length=254, unique=True, default=''),
            preserve_default=False,
        ),
        migrations.CreateModel(
            name='Book',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False)),
                ('title', models.CharField(max_length=200)),
            ],
        ),
    ]

Наиболее распространенные операции:

  • CreateModel: Создает новую таблицу в БД.
  • DeleteModel: Удаляет таблицу.
  • AddField: Добавляет новый столбец в таблицу.
  • RemoveField: Удаляет столбец.
  • AlterField: Изменяет параметры существующего столбца.
  • RenameModel / RenameField: Переименовывает таблицу или столбец.
  • RunPython: Выполняет произвольный Python-код (для миграций данных).
  • RunSQL: Выполняет произвольный SQL-запрос.