Курс по 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