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

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

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

Синтаксис

connection.begin()

Пример

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

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

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

[(1, 'article')]

Пример

Давайте используем метод begin как контекстный менеджер для автоматического завершения транзакции:

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

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

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

Пример

Давайте откатим транзакцию методом rollback, если что-то пошло не так:

from sqlalchemy import create_engine, text engine = create_engine('sqlite:///:memory:') with engine.connect() as conn: conn.execute(text('CREATE TABLE articles (id INTEGER, title TEXT)')) trans = conn.begin() try: conn.execute(text("INSERT INTO articles VALUES (1, 'article')")) raise Exception('something went wrong') trans.commit() except Exception: trans.rollback() res = conn.execute(text('SELECT * FROM articles')).fetchall() print(res)

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

[]

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

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