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

Атрибут dirty

Атрибут dirty класса Session возвращает объект IdentitySet, содержащий все объекты, которые были изменены в текущей сессии, но еще не сброшены в базу данных. Атрибут доступен только для чтения и обновляется автоматически при изменении состояния объектов.

Синтаксис

session.dirty

Пример

Давайте создадим сессию, добавим объект и изменим его, чтобы увидеть, как работает атрибут dirty:

from sqlalchemy import create_engine 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] text: Mapped[str] engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) with Session(engine) as session: article = Article(title='article', text='text') session.add(article) session.flush() print(len(session.dirty)) article.title = 'new article' print(len(session.dirty)) print(session.dirty)

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

0 1 {Article(id=1)}

Пример

Давайте проверим, что после сброса изменений атрибут dirty становится пустым:

from sqlalchemy import create_engine 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] text: Mapped[str] engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) with Session(engine) as session: article = Article(title='article', text='text') session.add(article) session.flush() article.text = 'new text' print(len(session.dirty)) session.flush() print(len(session.dirty))

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

1 0

Пример

Давайте посмотрим, как атрибут dirty работает с несколькими объектами:

from sqlalchemy import create_engine 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] text: Mapped[str] engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) with Session(engine) as session: article1 = Article(title='article 1', text='text 1') article2 = Article(title='article 2', text='text 2') session.add_all([article1, article2]) session.flush() article1.title = 'new article 1' article2.text = 'new text 2' print(len(session.dirty)) for article in session.dirty: print(article.title)

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

2 new article 1 article 2

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

  • класс Session,
    который управляет жизненным циклом объектов
  • атрибут new,
    который возвращает новые объекты сессии
  • атрибут deleted,
    который возвращает удаленные объекты сессии
  • метод flush,
    который сбрасывает изменения в базу данных
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить