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

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

Метод commit класса AsyncConnection фиксирует текущую транзакцию, то есть применяет все изменения, выполненные в рамках этой транзакции, к базе данных. Метод не принимает параметров и возвращает объект None. Вызывать его следует только тогда, когда асинхронное соединение уже находится внутри активной транзакции, например после вызова метода begin или после выполнения первого запроса, автоматически открывшего транзакцию.

Синтаксис

await conn.commit()

Пример

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

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)')) await conn.execute(text("INSERT INTO articles (title) VALUES ('article')")) await conn.commit() res = await conn.execute(text('SELECT title FROM articles')) print(res.fetchall()) await engine.dispose() asyncio.run(main())

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

[('article',)]

Пример

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

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)')) async with conn.begin(): await conn.execute(text("INSERT INTO articles (title) VALUES ('article 1')")) await conn.execute(text("INSERT INTO articles (title) VALUES ('article 2')")) await conn.execute(text("INSERT INTO articles (title) VALUES ('article 3')")) res = await conn.execute(text('SELECT title FROM articles')) print(res.fetchall()) await engine.dispose() asyncio.run(main())

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

[('article 1',), ('article 2',), ('article 3',)]

Пример

Давайте покажем, что без вызова commit изменения не попадут в базу данных. После отката транзакции таблица будет пустой:

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)')) await conn.execute(text("INSERT INTO articles (title) VALUES ('article')")) await conn.rollback() res = await conn.execute(text('SELECT COUNT(*) FROM articles')) print(res.scalar()) await engine.dispose() asyncio.run(main())

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

0

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

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