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

Атрибут modified класса InstanceState

Атрибут modified класса InstanceState возвращает логическое значение, которое показывает, имеет ли объект несохраненные изменения в атрибутах. Значение True означает, что хотя бы одна колонка объекта была изменена после его загрузки или добавления в сессию. Значение False говорит о том, что объект не содержит изменений, ожидающих сброса в базу данных.

Доступ к атрибуту осуществляется через функцию inspect, первым параметром которой передается экземпляр модели. Полученный объект InstanceState содержит всю информацию о состоянии экземпляра в рамках сессии.

Синтаксис

from sqlalchemy import inspect state = inspect(instance) state.modified

Пример

Давайте создадим модель, добавим объект в сессию и проверим значение атрибута modified сразу после добавления:

from sqlalchemy import create_engine, inspect 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] status: Mapped[str] num: Mapped[int] engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) with Session(engine) as session: article = Article( title='article', text='text', status='draft', num=1 ) session.add(article) state = inspect(article) print(state.modified)

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

True

Пример

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

from sqlalchemy import create_engine, inspect 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] status: Mapped[str] num: Mapped[int] engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) with Session(engine) as session: article = Article( title='article', text='text', status='draft', num=1 ) session.add(article) session.commit() state = inspect(article) print(state.modified)

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

False

Пример

Давайте изменим заголовок уже сохраненного объекта и проверим, что атрибут modified снова стал True:

from sqlalchemy import create_engine, inspect 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] status: Mapped[str] num: Mapped[int] engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) with Session(engine) as session: article = Article( title='article', text='text', status='draft', num=1 ) session.add(article) session.commit() article.title = 'article 2' state = inspect(article) print(state.modified)

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

True

Пример

Давайте присвоим атрибуту исходное значение и проверим, что modified вернется к значению False, так как изменений по факту нет:

from sqlalchemy import create_engine, inspect 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] status: Mapped[str] num: Mapped[int] engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) with Session(engine) as session: article = Article( title='article', text='text', status='draft', num=1 ) session.add(article) session.commit() article.title = 'article 2' article.title = 'article' state = inspect(article) print(state.modified)

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

False

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

  • класс InstanceState,
    который хранит состояние экземпляра модели
  • атрибут unmodified,
    который показывает отсутствие изменений у объекта
  • атрибут session,
    который возвращает сессию объекта
  • атрибут object,
    который возвращает сам экземпляр модели
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить