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

Создадим таблицу данных для нашей модели в базе данных. Джанго поставляется с системой миграции для отслеживания изменений, внесенных в модели, и их синхронизации с базой данных. Команда migrate применяет миграцию для всех приложений, перечисленных в INSTALLED_APPS; она синхронизирует базу данных с текущими моделями и миграцией.

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

python manage.py makemigrations blog

Вы должны получить следующий результат:

Migrations for 'blog':
    0001_initial.py:
    - Create model Post

Джанго только что создал файл file 0001_initial.py в каталоге приложения blog. Можно открыть этот файл, чтобы увидеть, как выглядит миграция.

Рассмотрим код SQL, который будет выполняться в базе данных для создания таблицы для нашей модели. Команда sqlmigrate принимает имена миграции и возвращает их SQL без запуска. Выполните следующую команду для проверки выходных данных:

python manage.py sqlmigrate blog 0001

Результат должен выглядеть следующим образом:

BEGIN;
CREATE TABLE "blog_post" ("id" integer NOT NULL PRIMARY KEY
AUTOINCREMENT, "title" varchar(250) NOT NULL, "slug" varchar(250) NOT
NULL, "body" text NOT NULL, "publish" datetime NOT NULL, "created"
datetime NOT NULL, "updated" datetime NOT NULL, "status" varchar(10)
NOT NULL, "author_id" integer NOT NULL REFERENCES "auth_user" ("id"));
CREATE INDEX "blog_post_2dbcba41" ON "blog_post" ("slug");
CREATE INDEX "blog_post_4f331e2f" ON "blog_post" ("author_id");
COMMIT;

Точный результат зависит от используемой базы данных. Выводимые выше выходные данные генерируются для SQLite. Как вы видите, Джанго создает имена таблиц, сочетая имя приложения и строчное имя модели (blogpost), но можно также указать их в классе Meta модели, используя атрибут db_table. Джанго автоматически создает первичный ключ для каждой модели, но можно также переопределить это задание primary_key=True в одном из полей модели.

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

python manage.py migrate

Будет выведен следующий результат, заканчивающийся следующей строкой:

Applying blog.0001_initial... OK

Мы только что применили миграцию для приложений, перечисленных в INSTALLED_APPS, включая наше приложение 'blog'. После применения миграции база данных отразит текущее состояние наших моделей.

При редактировании файла models.py с целью добавления, удаления или изменения полей существующих моделей, а также при добавлении новых моделей, необходимо будет создать новую миграцию с помощью команды makemigrations. Миграция позволит Джанго отслеживать изменения модели. Затем необходимо применить его с помощью команды migrate, чтобы синхронизировать базы данных с моделями.

results matching ""

    No results matching ""