Метод 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