Какие основные команды Django используются для управления миграциями базы данных?

Ответ

Для управления схемой базы данных через систему миграций в Django используются следующие ключевые команды manage.py.

Создание и применение миграций

  • python manage.py makemigrations [app_label] Анализирует изменения в ваших моделях (models.py) и создает новые файлы миграций в директории migrations/ соответствующего приложения. Эти файлы содержат Python-код, описывающий изменения схемы.

  • python manage.py migrate [app_label] [migration_name] Применяет все непримененные миграции к базе данных, синхронизируя её состояние с моделями. Без аргументов применяет миграции для всех приложений.

Инспекция и отладка

  • python manage.py showmigrations Показывает список всех миграций во всех приложениях проекта и их статус: [X] для примененных и [ ] для непримененных.

  • python manage.py sqlmigrate <app_label> <migration_name> Выводит на экран SQL-код, который будет выполнен для указанной миграции. Очень полезно для отладки и понимания того, что именно Django собирается сделать с базой данных.

Продвинутое управление и откат

  • python manage.py migrate <app_label> <migration_name> Позволяет откатить миграции. Чтобы откатить все миграции в приложении myapp до миграции 0002_..., нужно применить предыдущую миграцию:

    python manage.py migrate myapp 0001

    Для полного отката всех миграций приложения используется ключевое слово zero:

    python manage.py migrate myapp zero
  • python manage.py migrate --fake Отмечает все непримененные миграции как примененные, но не выполняет соответствующий SQL-код. Используется в редких случаях, когда схема базы данных уже находится в нужном состоянии вручную, и нужно лишь синхронизировать с ней таблицу миграций Django.

Типичный рабочий процесс

# 1. После внесения изменений в models.py создаем файл миграции
python manage.py makemigrations

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

Ответ 18+ 🔞

Ах ты ж ёпта, ну и тема у нас сегодня — эти ваши миграции в Джанго! Сидишь такой, пишешь свои модели в models.py, а потом бац — и надо базу под них подогнать. Вот тут-то и начинается магия, а точнее, команды manage.py, которые как волшебная палочка, только для задротов.

Слушай сюда, главные заклинания, без которых ты нихуя не сделаешь:

Создание и применение миграций

  • python manage.py makemigrations [app_label] Эта команда — как детектив. Она смотрит на твои модели, потом на то, что уже в базе, и охуевает от разницы. Потом успокаивается и создаёт в папке migrations/ файлик с инструкциями, как эту разницу устранить. Код там на Питоне, но по сути это план работ для базы данных.

  • python manage.py migrate [app_label] [migration_name] А это уже прораб. Берёт план, который составил детектив, и говорит базе: «Делай как тут написано, быстро!». Без аргументов заставит работать всех прорабов на всех объектах (во всех приложениях).

Чтобы не запутаться и всё проверить

  • python manage.py showmigrations Открываешь сводку по объектам. Видишь список всех миграций и галочки: [X] — работа сделана, [ ] — ещё не начинали, план лежит. Красота, всё на виду.

  • python manage.py sqlmigrate <app_label> <migration_name> Вот это, блядь, самая полезная штука иногда. Хочешь знать, какую именно хуйню Джанго собирается впихнуть в твою чистую базу? Эта команда покажет сырой SQL-код, который будет выполнен. Прям как рентген, видно все кости операции.

А если накосячил и надо откатить?

  • python manage.py migrate <app_label> <migration_name> О, тут начинается цирк. Допустим, в приложении myapp ты дошёл до миграции 0004_кривая_миграция, и всё ебнулось. Чтобы откатиться назад, к стабильной 0002_хорошая_миграция, говоришь прорабу:

    python manage.py migrate myapp 0002

    Он всё отменит. А если хочешь всё к хуям снести в этом приложении, скажи zero:

    python manage.py migrate myapp zero

    И от него ничего не останется, чистый лист, блядь.

  • python manage.py migrate --fake Это для особо хитрожопых ситуаций. Допустим, ты вручную наколхозил в базе то, что нужно, а Джанго орёт, что миграции не применены. Эта команда подмигнёт системе и скажет: «Всё ок, чувак, мы уже всё сделали, просто отметь галочки». SQL не выполняется, только галочки ставятся. Опасно, но иногда спасает.

Ну и как обычно всё работает, в двух шагах:

# 1. Написал модель — создай план работ.
python manage.py makemigrations

# 2. Утвердил план — заставь базу его выполнить.
python manage.py migrate

Вот и вся философия. Главное — не бояться команды showmigrations, чтобы всегда знать, где какие галочки стоят. А то можно так намигрировать, что потом полдня будешь откатывать, ебать мои старые костыли.