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

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

Атрибут dict класса InstanceState представляет собой словарь, содержащий значения загруженных атрибутов объекта. Ключами словаря выступают имена атрибутов, а значениями - их текущие значения в объекте. Атрибут доступен через функцию inspect и позволяет получить доступ к внутреннему состоянию объекта без обращения к его атрибутам напрямую.

Словарь dict содержит только те атрибуты, которые были загружены или установлены. Атрибуты, которые еще не загружены из базы данных, в этот словарь не попадают - для них следует использовать атрибут unloaded.

Синтаксис

inspect(obj).dict

Пример

Давайте создадим объект и посмотрим на его словарь dict через inspect:

from sqlalchemy import create_engine, String from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, Session from sqlalchemy import inspect class Base(DeclarativeBase): pass class Article(Base): __tablename__ = 'articles' id: Mapped[int] = mapped_column(primary_key=True) title: Mapped[str] = mapped_column(String(50)) text: Mapped[str] = mapped_column(String(200)) engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) article = Article(title='article', text='some text') state = inspect(article) print(state.dict)

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

{'title': 'article', 'text': 'some text'}

Пример

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

from sqlalchemy import create_engine, String from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, Session from sqlalchemy import inspect class Base(DeclarativeBase): pass class Article(Base): __tablename__ = 'articles' id: Mapped[int] = mapped_column(primary_key=True) title: Mapped[str] = mapped_column(String(50)) text: Mapped[str] = mapped_column(String(200)) engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) with Session(engine) as session: article = Article(title='article', text='some text') session.add(article) session.flush() state = inspect(article) print(state.dict)

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

{'id': 1, 'title': 'article', 'text': 'some text'}

Пример

Давайте загрузим объект из базы данных и убедимся, что словарь dict содержит все загруженные атрибуты:

from sqlalchemy import create_engine, String, select from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, Session from sqlalchemy import inspect class Base(DeclarativeBase): pass class Article(Base): __tablename__ = 'articles' id: Mapped[int] = mapped_column(primary_key=True) title: Mapped[str] = mapped_column(String(50)) text: Mapped[str] = mapped_column(String(200)) engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) with Session(engine) as session: session.add(Article(title='article', text='some text')) session.commit() article = session.scalars(select(Article)).one() state = inspect(article) print(state.dict)

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

{'id': 1, 'title': 'article', 'text': 'some text'}

Пример

Давайте проверим, что после изменения атрибута словарь dict также отражает новое значение, а список измененных атрибутов доступен отдельно:

from sqlalchemy import create_engine, String from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, Session from sqlalchemy import inspect class Base(DeclarativeBase): pass class Article(Base): __tablename__ = 'articles' id: Mapped[int] = mapped_column(primary_key=True) title: Mapped[str] = mapped_column(String(50)) text: Mapped[str] = mapped_column(String(200)) engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) with Session(engine) as session: article = Article(title='article', text='some text') session.add(article) session.flush() article.title = 'new article' state = inspect(article) print(state.dict) print(state.modified)

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

{'id': 1, 'title': 'new article', 'text': 'some text'} {'title'}

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

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