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

Начиная с версии 1.4, SQLAlchemy поддерживает функции асинхронного ввода-вывода (AsyncIO), что обеспечивает поддержку асинхронных соединений, сеансов, транзакций и драйверов базы данных. Большинство процедур создания такие же, как и для синхронной работы.

Установка драйверов базы данных, совместимых с asyncio

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

pip install asyncpg

Другие драйвера мы рассматривали в этом разделе

 

Настройка подключения к базе данных

После установки необходимых драйверов мы можем получить ядро базы данных с помощью метода create_async_engine() приложения, который создает асинхронную версию механизма SQLAlchemy, известную как AsyncEngine.

Кроме того, у него также есть параметр echo, который может предоставить нам сгенерированные SQL-запросы в консоли сервера во время выполнения. Но наиболее важным является URL-адрес базы данных, который теперь отражает асинхронный доступ к базе данных посредством вызова протокола asyncpg.

Откроем файл backend/db.py и изменим настройки подключения к базе данных:

from sqlalchemy.ext.asyncio import create_async_engine, async_sessionmaker, AsyncSession
from sqlalchemy.orm import DeclarativeBase


engine = create_async_engine('postgresql+asyncpg://ecommerce:xxxxxx@localhost:5432/ecommerce', echo=True)
async_session_maker = async_sessionmaker(engine, expire_on_commit=False, class_=AsyncSession)

class Base(DeclarativeBase):
    pass

Синтаксис подключения выглядит следующим образом:

myusername:mypassword@myhost:5432/mydatabase

Как и в синхронной версии, директива sessionmaker() используется для создания фабрики сессий с некоторыми новыми параметрами, установленными для включения AsyncSession. Во-первых, для его параметра expire_ on _ commit установлено значение False, чтобы экземпляры этой модели и значения ее атрибутов были доступны на время транзакции, даже после вызова commit().

В отличие от синхронной среды, все классы сущностей и их объекты столбцов по-прежнему доступны другим процессам даже после фиксации транзакции. Затем его параметр class_ будет иметь имя класса AsyncSession, объекта, который будет управлять транзакциями.


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