Создание и запуск файлов миграций

Курс по Django: https://stepik.org/a/183363

Архив проекта: 18_sitewomen.zip

На предыдущем занятии мы с вами определили модель таблицы БД с помощью класса Women. Теперь нам нужно создать таблицу уже непосредственно в БД на основе этого описания. Для этого в Django (да и не только в нем) существует механизм, известный как создание и выполнение миграций. Что это такое? Фактически, каждая миграция представляет собой отдельный файл (модуль) с текстом программы на языке Python, где описаны наборы команд на уровне ORM интерфейса, для создания таблиц определенных структур. При выполнении файла миграции в БД автоматически создаются новые или изменяются прежние таблицы, а также связи между ними. Каждый новый файл миграции помещается в папку migrations текущего приложения и описывает лишь изменения, которые произошли в структурах таблиц с прошлого раза. Их можно воспринимать как контролеры версий: всегда можно откатиться к предыдущей структуре и продолжить работу с прежней версией структур и связей между таблицами. Конечно, при разработке сайтов структуру таблиц и их связей лучше продумывать как можно точнее. Но учесть все заранее очень сложно, поэтому миграции так полезны при разработке проектов.

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

python manage.py makemigrations

Видим, что в каталоге migrations приложения women был успешно создан файл миграции с именем 0001_initial.py. Если открыть этот файл, то увидим команду CreateModel, которая создает таблицу women с указанным набором полей, включая поле id.

Команду makemigrations следует выполнять каждый раз, когда у нас меняется хотя бы одна модель, иначе изменения не отразятся в файлах миграций и, как следствие, в самой БД. Сам веб-сервер этого не делает. Мы должны самостоятельно заранее подготовить (создать) нужные таблицы, а потом они просто используются для наполнения данными.

Чтобы посмотреть SQL-запрос, который будет выполнен при использовании данной миграции, можно записать следующую команду sqlmigrate:

python manage.py sqlmigrate women 0001

После этой команды мы указываем название приложения и порядковый номер миграции (только номер без _initial.py). Выполняя ее, в консоли увидим соответствующий SQL-запрос. Конечно, этот запрос может меняться в зависимости от выбранного типа БД.

Но пока мы лишь создали файл миграции. В БД по-прежнему нет никаких изменений. Чтобы изменения вступили в силу, необходимо выполнить файлы миграций. На самом деле их будет несколько, так как есть стандартные модели и для них также создаются файлы миграций, например, связанные с админ-панелью, авторизацией, сессиями и так далее, то есть с модулями, которые подключены по умолчанию к нашему проекту. Итак, для выполнения миграций запишем команду:

python manage.py migrate

Все выполнилось успешно и если открыть файл БД в SQLiteStudio, то увидим в ней множество таблиц, в том числе и нашу таблицу women_women. Ее имя было определено по имени приложения Women и имени модели, которое также Women. Если дважды щелкнуть на таблицу, то увидим ее структуру, именно ту, что определили в нашей модели.

Вот так через механизм миграций создаются соответствующие таблицы в БД. В последующих занятиях мы еще будем возвращаться к этой теме, добавлять новые таблицы, устанавливать между ними связи и выполнять ORM-команды.

Курс по Django: https://stepik.org/a/183363

Видео по теме