РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
596 of 711 menu

Класс async_sessionmaker

Класс async_sessionmaker создает фабрику асинхронных сессий. Фабрика вызывается для получения нового объекта AsyncSession, через который выполняются запросы к базе данных. Первым параметром класс принимает async-движок, созданный функцией create_async_engine. Параметр expire_on_commit управляет сбросом состояния объектов после коммита, а class_ позволяет подменить класс сессии на собственный.

Синтаксис

async_sessionmaker(bind, [class_], [expire_on_commit])

Пример

Давайте создадим фабрику асинхронных сессий для базы SQLite в памяти:

from sqlalchemy.ext.asyncio import create_async_engine, async_sessionmaker engine = create_async_engine('sqlite+aiosqlite:///:memory:') session_factory = async_sessionmaker(engine) print(session_factory)

Результат выполнения кода:

"async_sessionmaker(class_=AsyncSession, expire_on_commit=True)"

Пример

Давайте создадим сессию через фабрику и выполним простой запрос:

import asyncio from sqlalchemy import text from sqlalchemy.ext.asyncio import create_async_engine, async_sessionmaker engine = create_async_engine('sqlite+aiosqlite:///:memory:') session_factory = async_sessionmaker(engine) async def main(): async with session_factory() as session: res = await session.execute(text('SELECT 1')) print(res.scalar()) asyncio.run(main())

Результат выполнения кода:

"1"

Пример

Давайте отключим параметр expire_on_commit, чтобы объекты сохраняли данные после коммита:

<+python+> from sqlalchemy.ext.asyncio import create_async_engine, async_sessionmaker engine = create_async_engine('sqlite+aiosqlite:///:memory:') session_factory = async_sessionmaker(engine, expire_on_commit=False) print(session_factory.kw['expire_on_commit']) <-python+>

Результат выполнения кода:

"False"

Пример

Давайте рассмотрим работу с моделью через асинхронную сессию. Создадим таблицу articles и добавим запись:

from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column class Base(DeclarativeBase): pass class Article(Base): __tablename__ = 'articles' id: Mapped[int] = mapped_column(primary_key=True) title: Mapped[str] text: Mapped[str] status: Mapped[str] num: Mapped[int]
import asyncio from sqlalchemy import select from sqlalchemy.ext.asyncio import create_async_engine, async_sessionmaker from models import Base, Article engine = create_async_engine('sqlite+aiosqlite:///:memory:') session_factory = async_sessionmaker(engine, expire_on_commit=False) async def main(): async with engine.begin() as conn: await conn.run_sync(Base.metadata.create_all) async with session_factory() as session: article = Article( title='article', text='sqlite:///:memory:', status='user', num=1, ) session.add(article) await session.commit() res = await session.execute(select(Article)) for row in res.scalars(): print(row.title, row.num) asyncio.run(main())

Результат выполнения кода:

"article 1"

Смотрите также

  • класс async_sessionmaker,
    который представляет фабрику асинхронных сессий
  • метод begin,
    который открывает транзакцию на фабрике сессий
  • метод configure,
    который меняет настройки фабрики сессий
  • функцию async_sessionmaker,
    которая создает сессии для async-движка
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить