Класс Mapper
Класс Mapper представляет собой центральный объект
в ORM SQLAlchemy. Он осуществляет связь между
пользовательским классом Python и таблицей в базе данных.
Mapper хранит информацию о том, каким столбцам таблицы
соответствуют атрибуты класса. Обычно нет необходимости
создавать объект Mapper вручную, так как он создается
автоматически при использовании декларативного стиля
или функции registry.map_imperatively.
Синтаксис
class Mapper:
def __init__(self, class_, local_table, properties=None, **kwargs):
...
Пример
Давайте создадим модель и получим доступ к ее
объекту Mapper через атрибут __mapper__:
from sqlalchemy import create_engine, 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(50))
text: Mapped[str] = mapped_column(String(200))
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
mapper = Article.__mapper__
print(mapper)
Результат выполнения кода:
"Mapper[Article(articles)]"
Пример
Давайте рассмотрим основные атрибуты Mapper, такие как
class_ и local_table:
from sqlalchemy import create_engine, 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(50))
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
mapper = Article.__mapper__
print(mapper.class_)
print(mapper.local_table)
Результат выполнения кода:
<class '__main__.Article'>
articles
Пример
Давайте получим список свойств маппера, используя
атрибут attrs:
from sqlalchemy import create_engine, 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(50))
status: Mapped[str] = mapped_column(String(20))
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
mapper = Article.__mapper__
for attr in mapper.attrs:
print(attr.key)
Результат выполнения кода:
"id"
"title"
"status"
Смотрите также
-
атрибут
columns,
который содержит коллекцию столбцов маппера -
атрибут
relationships,
который хранит связи между моделями -
атрибут
primary_key,
который представляет первичный ключ таблицы -
метод
get_property,
который возвращает свойство по его имени