РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
180 of 711 menu

Атрибут attrs

Атрибут attrs класса Mapper возвращает объект ImmutableProperties, который представляет собой коллекцию всех атрибутов, сконфигурированных для данного маппера. В эту коллекцию входят как колоночные атрибуты, соответствующие столбцам таблицы, так и атрибуты связей между моделями. Коллекция доступна только для чтения и позволяет перебирать атрибуты, обращаться к ним по имени и получать информацию о каждом из них.

Синтаксис

Mapper.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(100)) text: Mapped[str] = mapped_column(String(500)) engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) mapper = Article.__mapper__ for attr in mapper.attrs: print(attr.key)

Результат выполнения кода:

"id" "title" "text"

Пример

Давайте обратимся к конкретному атрибуту по имени и выведем информацию о нем:

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(100)) engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) mapper = Article.__mapper__ attr = mapper.attrs['title'] print(attr) print(attr.key) print(attr.columns)

Результат выполнения кода:

"ColumnProperty(Article.title)" "title" "(Column('title', String(length=100), table=<articles>),)"

Пример

Давайте проверим наличие атрибута в коллекции и получим их количество:

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(100)) status: Mapped[str] = mapped_column(String(50)) engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) mapper = Article.__mapper__ print('title' in mapper.attrs) print('missing' in mapper.attrs) print(len(mapper.attrs))

Результат выполнения кода:

True False 3

Пример

Давайте переберем атрибуты и для каждого выведем имя соответствующего столбца:

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(100)) num: Mapped[int] = mapped_column() engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) mapper = Article.__mapper__ for attr in mapper.attrs: for column in attr.columns: print(attr.key, '->', column.name)

Результат выполнения кода:

"id -> id" "title -> title" "num -> num"

Смотрите также

  • класс Mapper,
    который представляет маппер модели
  • атрибут columns,
    который возвращает столбцы маппера
  • атрибут relationships,
    который возвращает связи маппера
  • метод get_property,
    который возвращает атрибут по имени
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить