Создание таблиц
Для создания таблиц, мы можем вызвать метод MetaData.create_all() с объектом Engine.
model_file.Base.metadata.create_all(bind=engine)
Этот метод создает таблицы только в том случае, если они не существуют в базе данных. Это значит, что его можно вызвать безопасно несколько раз добавив например в main.py.
Но делать мы это не будем, так как, вызов этого метода после изменения наших моделей ничего не изменит. Для этого нужно использовать инструмент миграции под названием Alembic.
Alembic
Alembic предоставляет нам способ программно создавать и выполнять миграции для обработки изменений в базе данных, которые нам нужно будет вносить по мере развития нашего приложения. Например, мы можем добавить столбцы в наши таблицы или удалить атрибуты из наших моделей. Мы также можем добавить совершенно новые модели или разделить существующую модель на несколько моделей. Alembic предоставляет нам способ обеспечить эти типы изменений, используя возможности SQLAlchemy.
Процесс миграции с помощью Alembic состоит из следующих шагов:
- Создание миграционных файлов. Alembic автоматически генерирует скрипты миграции, которые содержат изменения в структуре базы данных.
- Применение миграций. Alembic позволяет применять миграции к базе данных с помощью команды alembic upgrade. Это позволяет обновлять структуру базы данных и применять изменения, описанные в миграционных файлах.
- Откат миграций. Alembic позволяет откатывать миграции с помощью команды alembic downgrade. Это позволяет отменять изменения и возвращаться к предыдущим версиям базы данных.
Использование Alembic для миграции базы данных позволяет сохранить целостность данных и обеспечить гибкость в разработке приложений. Этот инструмент значительно облегчает процесс изменения структуры базы данных, делая его более простым и предсказуемым.
Чтобы начать, нам нужно установить Alembic, что мы можем сделать со следующим:
pip install alembic
Чтобы создать среду миграции, запустим команду, чтобы создать нашу среду миграции в каталоге app/migrations/.
alembic init app/migrations
Вы можете выбрать любое имя каталога, которое вам нравится, главное его назвать с таким именем, что нигде не будет использоваться в качестве имени модуля в вашем коде. Мы получим следующий ответ:
Creating directory ' ~/PycharmProjects/FastAPI_beginners/fastapi_ecommerce/app/migrations' ... done
Creating directory '~/PycharmProjects/FastAPI_beginners/fastapi_ecommerce/app/migrations/versions' ... done
Generating ~/PycharmProjects/FastAPI_beginners/fastapi_ecommerce/app/migrations/script.py.mako ... done
Generating ~/PycharmProjects/FastAPI_beginners/fastapi_ecommerce/app/migrations/env.py ... done
Generating ~/PycharmProjects/FastAPI_beginners/fastapi_ecommerce/app/migrations/README ... done
Generating ~/PycharmProjects/FastAPI_beginners/fastapi_ecommerce/alembic.ini ... done
Please edit configuration/connection/logging settings in '~/PycharmProjects/FastAPI_beginners/fastapi_ecommerce/alembic.ini' before proceeding.
Этот процесс инициализации создает среду миграции в виде необходимых файлов, а также создает файл alembic.ini с параметрами конфигурации в корне проекта. Если мы посмотрим на нашу структуру сейчас, то увидим следующее:
В нашей папке migrations мы видим файл env.py и файл шаблона script.py.mako вместе с папкой versions.
- Папка
versionsбудет хранить наши скрипты миграции. - Файл
env.pyиспользуется Alembic для определения и создания экземпляра движка SQLAlchemy, подключения к этому движку и запуска транзакции, а также для правильного вызова движка миграции при запуске команды Alembic. - Шаблон
script.py.makoиспользуется при создании миграции и определяет базовую структуру миграции.
В следующем шаге мы настроим нашу среду миграций.