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

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

Метод begin класса AsyncEngine создает асинхронный контекстный менеджер для работы с транзакцией базы данных. Он автоматически открывает соединение, начинает транзакцию и фиксирует изменения при успешном выходе из блока. При возникновении исключения транзакция откатывается. Метод не принимает обязательных параметров.

Синтаксис

async with engine.begin() as conn: # work with connection

Пример

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

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

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

"1"

Пример

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

import asyncio from sqlalchemy.ext.asyncio import create_async_engine from sqlalchemy import text async def main(): engine = create_async_engine('sqlite+aiosqlite:///:memory:') async with engine.begin() as conn: await conn.execute(text( 'CREATE TABLE articles (' 'id INTEGER PRIMARY KEY, ' 'title VARCHAR(50)' ')' )) await conn.execute(text( "INSERT INTO articles (title) VALUES ('article')" )) async with engine.begin() as conn: res = await conn.execute(text('SELECT title FROM articles')) print(res.fetchall()) await engine.dispose() asyncio.run(main())

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

[('article',)]

Пример

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

import asyncio from sqlalchemy.ext.asyncio import create_async_engine from sqlalchemy import text async def main(): engine = create_async_engine('sqlite+aiosqlite:///:memory:') async with engine.begin() as conn: await conn.execute(text( 'CREATE TABLE articles (' 'id INTEGER PRIMARY KEY, ' 'title VARCHAR(50)' ')' )) try: async with engine.begin() as conn: await conn.execute(text( "INSERT INTO articles (title) VALUES ('article')" )) raise ValueError('Something went wrong') except ValueError as e: print(f'Error: {e}') async with engine.begin() as conn: res = await conn.execute(text('SELECT COUNT(*) FROM articles')) print(res.scalar()) await engine.dispose() asyncio.run(main())

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

"Error: Something went wrong" "0"

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

  • класс AsyncEngine,
    который представляет асинхронный движок базы данных
  • метод connect,
    который открывает асинхронное соединение с базой
  • метод dispose,
    который закрывает пул соединений движка
  • атрибут sync_engine,
    который возвращает синхронный движок
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить