Метод get_property
Метод get_property класса Mapper
возвращает объект свойства маппера по его имени.
Свойством может быть колонка, связь или
любой другой атрибут, настроенный на маппере.
Первым параметром метод принимает строку с именем
свойства, например 'id' или 'articles'.
Если свойство с таким именем не найдено,
метод выбрасывает исключение
InvalidRequestError.
Синтаксис
Mapper.get_property(key)
Пример
Давайте создадим модель и получим свойство колонки
id через метод get_property:
from sqlalchemy import create_engine, Integer, String
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] = mapped_column(String(100))
text: Mapped[str] = mapped_column(String(500))
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
mapper = Article.__mapper__
prop = mapper.get_property('id')
print(prop)
Результат выполнения кода:
"ColumnProperty(<Mapper|articles|Article>, Column('id', Integer(), table=<articles>, primary_key=True, nullable=False))"
Пример
Давайте получим несколько свойств и выведем их ключи и типы:
from sqlalchemy import create_engine, Integer, String
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] = mapped_column(String(100))
status: Mapped[str] = mapped_column(String(50))
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
mapper = Article.__mapper__
for name in ['id', 'title', 'status']:
prop = mapper.get_property(name)
print(name, type(prop).__name__)
Результат выполнения кода:
id ColumnProperty
title ColumnProperty
status ColumnProperty
Пример
Давайте попробуем получить несуществующее свойство и обработаем исключение:
from sqlalchemy import create_engine, Integer, String
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
from sqlalchemy.exc import InvalidRequestError
class Base(DeclarativeBase):
pass
class Article(Base):
__tablename__ = 'articles'
id: Mapped[int] = mapped_column(primary_key=True)
title: Mapped[str] = mapped_column(String(100))
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
mapper = Article.__mapper__
try:
prop = mapper.get_property('missing')
print(prop)
except InvalidRequestError as e:
print('error:', e)
Результат выполнения кода:
"error: Mapper 'Mapper|articles|Article' has no property 'missing'"
Смотрите также
-
класс
Mapper,
который представляет маппер класса -
атрибут
columns,
который хранит коллекцию колонок маппера -
атрибут
relationships,
который хранит связи между моделями -
метод
iterate_properties,
который перебирает все свойства маппера