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

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

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

Синтаксис

AsyncConnection.begin()

Пример

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

import asyncio from sqlalchemy import text from sqlalchemy.ext.asyncio import create_async_engine 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 TEXT)') ) await conn.execute( text("INSERT INTO articles (title) VALUES ('article 1')") ) await conn.execute( text("INSERT INTO articles (title) VALUES ('article 2')") ) res = await conn.execute(text('SELECT title FROM articles')) print(res.fetchall()) 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 async def main(): engine = create_async_engine('sqlite+aiosqlite:///:memory:') async with engine.connect() as conn: await conn.execute( text('CREATE TABLE articles (id INTEGER PRIMARY KEY, title TEXT)') ) transaction = await conn.begin() await conn.execute( text("INSERT INTO articles (title) VALUES ('article 1')") ) await transaction.commit() res = await conn.execute(text('SELECT title FROM articles')) print(res.fetchall()) await engine.dispose() asyncio.run(main())

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

[('article 1',)]

Пример

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

import asyncio from sqlalchemy import text from sqlalchemy.ext.asyncio import create_async_engine async def main(): engine = create_async_engine('sqlite+aiosqlite:///:memory:') async with engine.connect() as conn: await conn.execute( text('CREATE TABLE articles (id INTEGER PRIMARY KEY, title TEXT)') ) transaction = await conn.begin() try: await conn.execute( text("INSERT INTO articles (title) VALUES ('article 1')") ) await transaction.rollback() except Exception as error: await transaction.rollback() print('rolled back:', error) res = await conn.execute(text('SELECT title FROM articles')) print(res.fetchall()) await engine.dispose() asyncio.run(main())

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

[]

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

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