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