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

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

Метод begin класса Session начинает новую транзакцию. Он возвращает объект SessionTransaction, который можно использовать как контекстный менеджер. При входе в блок with транзакция стартует, а при выходе автоматически вызывается commit при успехе или rollback при исключении.

Синтаксис

Session.begin()

Пример

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

from sqlalchemy import create_engine, text from sqlalchemy.orm import Session engine = create_engine('sqlite:///:memory:') with Session(engine) as session: trans = session.begin() print(trans) session.execute(text('SELECT 1')) trans.commit()

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

"<sqlalchemy.orm.session.SessionTransaction object at 0x...>"

Пример

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

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, title TEXT)')) with session.begin(): session.execute( text('INSERT INTO articles (id, title) VALUES (:id, :title)'), {'id': 1, 'title': 'article'} ) res = session.execute(text('SELECT title FROM articles')).scalars().all() print(res)

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

['article']

Пример

Если внутри блока with session.begin произойдет исключение, транзакция автоматически откатится. Давайте проверим это:

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, title TEXT)')) try: with session.begin(): session.execute( text('INSERT INTO articles (id, title) VALUES (:id, :title)'), {'id': 1, 'title': 'article'} ) raise ValueError('something went wrong') except ValueError as exc: print(exc) res = session.execute(text('SELECT title FROM articles')).scalars().all() print(res)

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

something went wrong []

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

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