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

Атрибут unmodified

Атрибут unmodified класса InstanceState возвращает True, если объект находится в сессии, является постоянным и не имеет несохранённых изменений. Это логическое свойство доступно через функцию sqlalchemy.inspect, которая возвращает объект InstanceState для любого экземпляра модели. Атрибут не принимает параметров.

Синтаксис

inspect(obj).unmodified

Пример

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

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.unmodified)

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

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 = 'updated article' state = inspect(article) print(state.unmodified)

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

False

Пример

Давайте проверим, что после отката транзакции объект снова становится немодифицированным:

<+python+> 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 = 'updated article' print(inspect(article).unmodified) session.rollback() print(inspect(article).unmodified) <-python+>

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

False True

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

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