Метод rollback
Метод rollback класса SessionTransaction
откатывает текущую транзакцию, отменяя все
изменения, которые были сделаны в базе данных
в рамках этой транзакции. Метод не принимает
параметров. После вызова все объекты, находившиеся
в сессии, переводятся в состояние expired, а
транзакция завершается.
Синтаксис
transaction.rollback()
Пример
Давайте создадим транзакцию и откатим ее
методом 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 PRIMARY KEY, title TEXT)'))
transaction = conn.begin()
conn.execute(text("INSERT INTO articles (title) VALUES ('article 1')"))
transaction.rollback()
res = conn.execute(text('SELECT COUNT(*) FROM articles')).scalar()
print(res)
Результат выполнения кода:
"0"
Пример
Давайте откатим транзакцию с помощью метода
rollback объекта Session,
который выполняет откат через
SessionTransaction:
from sqlalchemy import create_engine, text
from sqlalchemy.orm import Session
engine = create_engine('sqlite:///:memory:')
with Session(engine) as session:
session.execute(text('CREATE TABLE articles (id INTEGER PRIMARY KEY, title TEXT)'))
session.commit()
session.execute(text("INSERT INTO articles (title) VALUES ('article 1')"))
session.rollback()
res = session.execute(text('SELECT COUNT(*) FROM articles')).scalar()
print(res)
Результат выполнения кода:
"0"
Пример
Давайте убедимся, что изменения, сделанные
до вызова 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 PRIMARY KEY, title TEXT)'))
conn.execute(text("INSERT INTO articles (title) VALUES ('article 1')"))
conn.commit()
transaction = conn.begin()
conn.execute(text("INSERT INTO articles (title) VALUES ('article 2')"))
transaction.rollback()
res = conn.execute(text('SELECT title FROM articles')).fetchall()
print(res)
Результат выполнения кода:
[('article 1',)]
Смотрите также
-
класс
SessionTransaction,
который представляет транзакцию сессии -
метод
commit,
который фиксирует текущую транзакцию -
метод
close,
который закрывает транзакцию -
метод
rollback,
который откатывает текущую транзакцию