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

Метод begin класса AsyncSession

Метод begin класса AsyncSession открывает новую транзакцию и возвращает объект AsyncSessionTransaction. Транзакция используется для группировки нескольких операций в одну атомарную единицу работы. Если транзакция не была открыта явно, асинхронная сессия автоматически начинает ее при первом запросе и завершает при вызове commit или rollback.

Метод не принимает обязательных параметров. Возвращаемый объект транзакции поддерживает асинхронный контекстный менеджер, что позволяет использовать конструкцию async with.

Синтаксис

await session.begin()

Пример

Давайте создадим асинхронную сессию и откроем транзакцию с помощью метода begin:

import asyncio from sqlalchemy.ext.asyncio import ( create_async_engine, AsyncSession ) async def main(): engine = create_async_engine('sqlite+aiosqlite:///:memory:') session = AsyncSession(engine) transaction = await session.begin() print(transaction) await transaction.commit() await session.close() await engine.dispose() asyncio.run(main())

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

"<sqlalchemy.ext.asyncio.session.AsyncSessionTransaction object at 0x...>"

Пример

Давайте выполним несколько операций внутри одной транзакции, открытой методом begin:

import asyncio from sqlalchemy import text from sqlalchemy.ext.asyncio import ( create_async_engine, AsyncSession ) async def main(): engine = create_async_engine('sqlite+aiosqlite:///:memory:') session = AsyncSession(engine) async with await session.begin(): await session.execute( text('CREATE TABLE articles (id INTEGER PRIMARY KEY, title TEXT)') ) await session.execute( text("INSERT INTO articles (title) VALUES ('article 1')") ) await session.execute( text("INSERT INTO articles (title) VALUES ('article 2')") ) res = await session.execute(text('SELECT title FROM articles')) print(res.scalars().all()) await session.close() await engine.dispose() asyncio.run(main())

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

['article 1', 'article 2']

Пример

Давайте откатим транзакцию, открытую методом begin, при возникновении ошибки:

import asyncio from sqlalchemy import text from sqlalchemy.ext.asyncio import ( create_async_engine, AsyncSession ) async def main(): engine = create_async_engine('sqlite+aiosqlite:///:memory:') session = AsyncSession(engine) async with await session.begin(): await session.execute( text('CREATE TABLE articles (id INTEGER PRIMARY KEY, title TEXT)') ) await session.execute( text("INSERT INTO articles (title) VALUES ('article 1')") ) raise Exception('Something went wrong') await session.close() await engine.dispose() asyncio.run(main())

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

"Exception: Something went wrong"

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

  • класс AsyncSession,
    который представляет асинхронную сессию
  • метод commit,
    который фиксирует текущую транзакцию
  • метод rollback,
    который откатывает текущую транзакцию
  • метод begin_nested,
    который открывает вложенную транзакцию
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить