Атрибут 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