Метод close
Метод close класса SessionTransaction
закрывает транзакцию и освобождает связанные
с ней ресурсы. Если транзакция еще не была
зафиксирована или откачена, метод выполняет
откат, после чего помечает транзакцию как
закрытую. Повторный вызов метода не приводит
к ошибке. Параметров метод не принимает.
Синтаксис
SessionTransaction.close()
Пример
Давайте создадим сессию и получим объект
транзакции, а затем закроем ее методом
close:
from sqlalchemy import create_engine
from sqlalchemy.orm import Session
engine = create_engine('sqlite:///:memory:')
with Session(engine) as session:
transaction = session.begin()
print(transaction)
transaction.close()
print(transaction.is_active)
Результат выполнения кода:
"<sqlalchemy.orm.session.SessionTransaction object at 0x...>"
False
Пример
Давайте выполним SQL-запрос внутри транзакции, а затем закроем ее, не подтверждая изменения:
from sqlalchemy import create_engine, text
from sqlalchemy.orm import Session
engine = create_engine('sqlite:///:memory:')
with Session(engine) as session:
transaction = session.begin()
session.execute(text('SELECT 1'))
transaction.close()
print('transaction closed')
Результат выполнения кода:
"transaction closed"
Пример
Давайте создадим таблицу, добавим запись и
закроем транзакцию методом close,
чтобы изменения не были зафиксированы:
from sqlalchemy import create_engine, text
from sqlalchemy.orm import Session
engine = create_engine('sqlite:///:memory:')
with Session(engine) as session:
transaction = session.begin()
session.execute(text('CREATE TABLE articles (id INTEGER, title TEXT)'))
session.execute(text("INSERT INTO articles VALUES (1, 'article')"))
transaction.close()
print('changes rolled back')
Результат выполнения кода:
"changes rolled back"
Смотрите также
-
класс
SessionTransaction,
который представляет транзакцию сессии -
метод
commit,
который фиксирует транзакцию -
метод
rollback,
который откатывает транзакцию -
метод
close,
который закрывает транзакцию