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

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

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

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

Синтаксис

Engine.begin()

Пример

Давайте откроем транзакцию и выполним простой запрос к базе SQLite в памяти:

from sqlalchemy import create_engine, text engine = create_engine('sqlite:///:memory:') with engine.begin() as conn: res = conn.execute(text('SELECT 1')) print(res.scalar())

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

1

Пример

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

from sqlalchemy import create_engine, text engine = create_engine('sqlite:///:memory:') with engine.begin() as conn: conn.execute(text( 'CREATE TABLE articles (' 'id INTEGER PRIMARY KEY, ' 'title TEXT)' )) conn.execute(text( "INSERT INTO articles (title) VALUES ('article')" )) with engine.connect() as conn: res = conn.execute(text('SELECT title FROM articles')) print(res.fetchall())

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

[('article',)]

Пример

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

from sqlalchemy import create_engine, text engine = create_engine('sqlite:///:memory:') with engine.begin() as conn: conn.execute(text( 'CREATE TABLE articles (' 'id INTEGER PRIMARY KEY, ' 'title TEXT)' )) try: with engine.begin() as conn: conn.execute(text( "INSERT INTO articles (title) VALUES ('article')" )) raise RuntimeError('rollback') except RuntimeError as err: print(err) with engine.connect() as conn: res = conn.execute(text('SELECT COUNT(*) FROM articles')) print(res.scalar())

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

rollback 0

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

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