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

Метод commit класса SessionTransaction

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

Синтаксис

transaction.commit()

Пример

Давайте создадим таблицу, добавим запись и зафиксируем транзакцию методом commit:

from sqlalchemy import create_engine, text from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, Session class Base(DeclarativeBase): pass class Article(Base): __tablename__ = 'articles' id: Mapped[int] = mapped_column(primary_key=True) title: Mapped[str] engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) with Session(engine) as session: with session.begin() as transaction: article = Article(title='article') session.add(article) transaction.commit() res = session.execute(text('SELECT title FROM articles')).all() print(res)

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

[('article',)]

Пример

Давайте выполним две отдельные транзакции и зафиксируем каждую методом commit:

from sqlalchemy import create_engine, text from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, Session class Base(DeclarativeBase): pass class Article(Base): __tablename__ = 'articles' id: Mapped[int] = mapped_column(primary_key=True) title: Mapped[str] engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) with Session(engine) as session: transaction = session.begin() session.add(Article(title='article 1')) transaction.commit() transaction = session.begin() session.add(Article(title='article 2')) transaction.commit() res = session.execute(text('SELECT title FROM articles')).all() print(res)

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

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

Пример

Давайте обновим запись внутри транзакции и зафиксируем изменение методом commit:

from sqlalchemy import create_engine, text from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, Session class Base(DeclarativeBase): pass class Article(Base): __tablename__ = 'articles' id: Mapped[int] = mapped_column(primary_key=True) title: Mapped[str] engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) with Session(engine) as session: with session.begin() as transaction: session.add(Article(title='article')) transaction.commit() with session.begin() as transaction: article_id = session.execute( text('SELECT id FROM articles') ).scalar_one() session.execute( text('UPDATE articles SET title = :title WHERE id = :id'), {'title': 'updated article', 'id': article_id} ) transaction.commit() res = session.execute(text('SELECT title FROM articles')).all() print(res)

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

[('updated article',)]

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

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