← Назад к вопросам

Какие команды нужны, чтобы создать схему миграции базы данных и откатить миграции в Django?

1.0 Junior🔥 201 комментариев
#Django#Базы данных (SQL)

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Django миграции: создание и откат

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

Основные команды

1. Создание миграции

# Создать миграцию на основе изменений в models.py
python manage.py makemigrations

# Создать миграцию для конкретного приложения
python manage.py makemigrations app_name

# Создать пустую миграцию (для ручного написания SQL)
python manage.py makemigrations --empty app_name --name custom_migration

2. Применение миграций

# Применить все необходимые миграции
python manage.py migrate

# Применить миграции для конкретного приложения
python manage.py migrate app_name

# Применить миграцию до конкретного номера
python manage.py migrate app_name 0002

3. Откат миграций

# Откатить все миграции для приложения
python manage.py migrate app_name zero

# Откатить до конкретной миграции
python manage.py migrate app_name 0001

4. Просмотр статуса

# Показать статус всех миграций
python manage.py showmigrations

# Показать SQL, который будет выполнен
python manage.py sqlmigrate app_name 0001

Пример: полный цикл разработки

# models.py
from django.db import models

class Article(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True)
    
    class Meta:
        db_table = 'articles'

Выполняем последовательность команд:

# 1. Создаём миграцию
python manage.py makemigrations

# 2. Смотрим статус
python manage.py showmigrations

# 3. Применяем миграцию
python manage.py migrate

# 4. Если нужно откатить
python manage.py migrate app zero

Ручное написание миграции

При сложных операциях можно написать собственную миграцию:

# app/migrations/0002_custom.py
from django.db import migrations

class Migration(migrations.Migration):
    dependencies = [
        ('app', '0001_initial'),
    ]
    
    operations = [
        migrations.RunSQL(
            sql='UPDATE articles SET content = NULL',
            reverse_sql='UPDATE articles SET content = 1'
        )
    ]

Важные моменты

1. Никогда не удаляй миграции Если миграция уже применена где-то, удаление сломает другие окружения. Вместо этого создай новую миграцию для отката изменений.

2. Проверяй SQL перед миграцией на production

python manage.py sqlmigrate app_name 0001

3. На production используй флаг --no-input

python manage.py migrate --no-input

4. При merge конфликтов

python manage.py makemigrations --merge

5. Порядок имеет значение Миграции применяются в хронологическом порядке по номерам файлов. Django отслеживает это в таблице django_migrations.

Типичный workflow CI/CD

#!/bin/bash
cd myproject

# Проверяем миграции на ошибки
python manage.py migrate --plan

# Применяем на staging
python manage.py migrate

# Тесты
python manage.py test

Практические советы

  • Всегда запускай makemigrations после изменений в моделях
  • Проверяй сгенерированные миграции перед коммитом
  • Для сложных изменений пиши миграции вручную с использованием RunSQL
  • На production всегда делай бэкап БД перед миграцией
  • Используй --plan флаг для предпросмотра операций

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

Какие команды нужны, чтобы создать схему миграции базы данных и откатить миграции в Django? | PrepBro