Атрибут mapper класса InstanceState
Атрибут mapper класса InstanceState возвращает объект
Mapper, который сопоставляет класс модели
с таблицей базы данных. Экземпляр InstanceState
извлекается из самой модели через функцию
inspect. Атрибут mapper не принимает
параметров и доступен только для чтения.
Синтаксис
state.mapper
Пример
Давайте создадим модель и получим ее маппер через
атрибут mapper:
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(title='article 1')
state = inspect(article)
print(state.mapper)
Результат выполнения кода:
"Mapper[Article(articles)]"
Пример
Давайте через маппер узнаем имя таблицы и первичный ключ модели:
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(title='article 1')
state = inspect(article)
print(state.mapper.local_table.name)
print(state.mapper.primary_key)
Результат выполнения кода:
"articles"
"(Column('id', Integer(), table=<articles>, primary_key=True, nullable=False),)"
Пример
Давайте сравним маппер отсоединенного экземпляра с маппером класса:
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(title='article 1')
state = inspect(article)
print(state.mapper is inspect(Article).mapper)
print(state.mapper.class_)
Результат выполнения кода:
"True"
"<class '__main__.Article'>"
Смотрите также
-
класс
InstanceState,
который отслеживает состояние экземпляра модели -
атрибут
object,
который возвращает сам отслеживаемый экземпляр -
атрибут
class_,
который возвращает класс отслеживаемого экземпляра -
атрибут
session,
который возвращает сессию экземпляра