5.8 Добавление асинхронности, переход на PostgreSQL
5 из 5 шагов пройдено
1 из 1 баллa  получен

Выполнение миграций

На данный момент в нашем файле env.py используется синхронные команды Alembic для определения и создания экземпляра движка SQLAlchemy, подключения к этому движку и запуска транзакции, а также для правильного вызова движка миграции при запуске команды Alembic. Но так как мы хотим работать с асинхронным драйвером, который будет использовать асинхронные запросы, нам необходимо удалить файл alembic.ini и всю папку migrations

 

Чтобы создать среду миграции, запустим команду, чтобы создать нашу среду миграции в каталоге app/migrations/.

alembic init -t async app/migrations

Мы используем флаг -t async для асинхронной поддержки.

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

sqlalchemy.url = postgresql+asyncpg://ecommerce:XXXXXX@localhost:5432/ecommerce

Далее откроем файл env.py в папке migrations и найдем следующую строку:

target_metadata = None

Изменим ее на следующий код:

from app.backend.db import Base
from app.models import category, products
target_metadata = Base.metadata

Мы импортируем класс Base, который мы наследуем от DeclarativeBase, а также наши модели SQLAlchemy.

И теперь мы можем выполнить миграции, чтобы создать в новой базе данных все необходимые таблицы:

alembic revision --autogenerate -m "Initial migration"

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

(.venv) permin0ff@Mac fastapi_ecommerce % alembic revision --autogenerate -m "Initial tables PostgreSQL"                                      
INFO  [alembic.runtime.migration] Context impl SQLiteImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
INFO  [alembic.autogenerate.compare] Detected added table 'categories'
INFO  [alembic.autogenerate.compare] Detected added index ''ix_categories_id'' on '('id',)'
INFO  [alembic.autogenerate.compare] Detected added index ''ix_categories_slug'' on '('slug',)'
INFO  [alembic.autogenerate.compare] Detected added table 'products'
INFO  [alembic.autogenerate.compare] Detected added index ''ix_products_id'' on '('id',)'
INFO  [alembic.autogenerate.compare] Detected added index ''ix_products_slug'' on '('slug',)'
  Generating ~/FastAPI_beginners/fastapi_ecommerce/app/migrations/versions/d63bc5937cb6_initial_tables_postgresql.py ...  done

И выполним миграции командой alembic upgrade head

(.venv) permin0ff@Mac fastapi_ecommerce % alembic upgrade head                                          
INFO  [alembic.runtime.migration] Context impl PostgresqlImpl.
INFO  [alembic.runtime.migration] Will assume transactional DDL.
INFO  [alembic.runtime.migration] Running upgrade -> d63bc5937cb6, Initial tables PostgreSQL

И теперь если мы посмотрим наши таблицы в БД, то увидим что они были успешно созданы.

В следующем разделе мы начнем работать с асинхронными запросами.


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