Атрибут object класса InstanceState
Атрибут object класса InstanceState возвращает
исходный пользовательский объект ORM, к которому
привязано это состояние. Каждый экземпляр модели
в SQLAlchemy имеет связанный объект InstanceState,
хранящий служебную информацию. Атрибут object
позволяет получить обратную ссылку от состояния
к самому объекту модели.
Синтаксис
state.object
Пример
Давайте создадим объект модели и получим его
состояние через функцию inspect, а затем
извлечем исходный объект атрибутом object:
from sqlalchemy import create_engine, inspect
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
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)
article = Article(id=1, title='article', text='sqlite')
state = inspect(article)
print(state.object)
Результат выполнения кода:
<__main__.Article object at 0x7f8a1c0b4d90>
Пример
Давайте убедимся, что атрибут object возвращает
тот же самый объект, который мы создали, и что
через него можно читать свойства модели:
from sqlalchemy import create_engine, inspect
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
class Base(DeclarativeBase):
pass
class Article(Base):
__tablename__ = 'articles'
id: Mapped[int] = mapped_column(primary_key=True)
title: Mapped[str]
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
article = Article(id=1, title='article')
state = inspect(article)
print(state.object is article)
print(state.object.title)
Результат выполнения кода:
True
"article"
Пример
Давайте получим объект из состояния уже загруженной записи после запроса к базе данных:
from sqlalchemy import create_engine, inspect, select
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]
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
with Session(engine) as session:
session.add(Article(id=1, title='article'))
session.commit()
with Session(engine) as session:
article = session.scalars(select(Article)).one()
state = inspect(article)
print(state.object.title)
print(state.object is article)
Результат выполнения кода:
"article"
True
Смотрите также
-
класс
InstanceState,
который хранит состояние объекта ORM -
атрибут
class_,
который возвращает класс объекта модели -
атрибут
mapper,
который возвращает маппер объекта модели -
атрибут
dict,
который возвращает словарь загруженных атрибутов