Какие команды нужны, чтобы создать схему миграции базы данных и откатить миграции в Django?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
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. Они гарантируют, что версия БД синхронизирована с кодом, и позволяют откатиться при проблемах.