Атрибут c класса Mapper
Атрибут c класса Mapper представляет собой
пространство имен, которое содержит колонки таблицы,
а также другие SQL-выражения, связанные с
отображаемым классом. Он позволяет обращаться
к столбцам через точечную нотацию, например,
Article.c.id или Article.c.title.
Это особенно удобно при построении запросов,
когда нужно явно указать столбец, избегая
конфликтов имен.
Синтаксис
Mapper.c
Пример
Давайте создадим модель и получим доступ
к колонкам через атрибут c:
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(Integer, primary_key=True)
title: Mapped[str] = mapped_column(String)
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
# Access the mapper's c attribute
print(Article.__mapper__.c.keys())
Результат выполнения кода:
['id', 'title']
Пример
Давайте используем атрибут c для
построения запроса с явным указанием колонок:
from sqlalchemy import create_engine, Integer, String, select
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, Session
class Base(DeclarativeBase):
pass
class Article(Base):
__tablename__ = 'articles'
id: Mapped[int] = mapped_column(Integer, primary_key=True)
title: Mapped[str] = mapped_column(String)
text: Mapped[str] = mapped_column(String)
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
with Session(engine) as session:
session.add(Article(id=1, title='article', text='some text'))
session.commit()
stmt = select(Article.__mapper__.c.id, Article.__mapper__.c.title)
res = session.execute(stmt).all()
print(res)
Результат выполнения кода:
[(1, 'article')]
Смотрите также
-
класс
Mapper,
который представляет отображение класса на таблицу -
атрибут
columns,
который возвращает коллекцию колонок -
атрибут
attrs,
который предоставляет доступ к атрибутам маппера -
атрибут
primary_key,
который возвращает первичный ключ таблицы