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

Атрибут autoflush

Атрибут autoflush класса Session управляет автоматическим сбросом (flush) изменений в базу данных перед выполнением запросов. По умолчанию атрибут имеет значение True, что означает, что сессия автоматически выполняет flush перед каждым запросом. Если установить значение False, то автоматический сброс выполняться не будет, и изменения попадут в базу только при явном вызове метода flush или commit.

Атрибут можно задать при создании сессии или изменить в любой момент работы с ней. Управление автосбросом полезно, когда нужно выполнить несколько запросов без промежуточной синхронизации с базой данных.

Синтаксис

session.autoflush = True # or False

Пример

Давайте создадим сессию с атрибутом autoflush, установленным в True, и добавим объект:

from sqlalchemy import create_engine, String 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] = mapped_column(String(100)) engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) with Session(engine) as session: session.autoflush = True article = Article(title='article') session.add(article) res = session.query(Article).all() print(len(res))

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

1

Пример

Теперь установим autoflush в False и посмотрим, как изменится поведение:

from sqlalchemy import create_engine, String 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] = mapped_column(String(100)) engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) with Session(engine) as session: session.autoflush = False article = Article(title='article') session.add(article) res = session.query(Article).all() print(len(res)) session.flush() res = session.query(Article).all() print(len(res))

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

0 1

Пример

Атрибут autoflush можно задать непосредственно при создании сессии через параметр конструктора:

from sqlalchemy import create_engine, String 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] = mapped_column(String(100)) engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) with Session(engine, autoflush=False) as session: article = Article(title='article') session.add(article) res = session.query(Article).all() print(len(res))

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

0

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

  • класс Session,
    который представляет сессию работы с базой данных
  • метод flush,
    который выполняет сброс изменений в базу данных
  • метод no_autoflush,
    который временно отключает автосброс
  • атрибут autocommit,
    который управляет автоматической фиксацией транзакций
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить