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

Метод iterate_properties

Метод iterate_properties класса Mapper возвращает итератор, который последовательно обходит все свойства маппера. Под свойствами понимаются колонки таблицы, отношения между моделями и другие атрибуты, привязанные к классу. Метод не принимает параметров и возвращает объект-итератор, элементы которого являются экземплярами ColumnProperty, RelationshipProperty и других классов свойств.

Синтаксис

Mapper.iterate_properties

Пример

Давайте создадим модель и получим список имен всех свойств маппера:

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 prop in mapper.iterate_properties: print(prop.key)

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

"id" "title" "text"

Пример

Давайте выведем не только имена, но и типы свойств маппера:

from sqlalchemy import create_engine, String, ForeignKey from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, relationship class Base(DeclarativeBase): pass class User(Base): __tablename__ = 'users' id: Mapped[int] = mapped_column(primary_key=True) name: Mapped[str] = mapped_column(String(100)) class Article(Base): __tablename__ = 'articles' id: Mapped[int] = mapped_column(primary_key=True) title: Mapped[str] = mapped_column(String(100)) user_id: Mapped[int] = mapped_column(ForeignKey('users.id')) user: Mapped[User] = relationship() engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) mapper = Article.__mapper__ for prop in mapper.iterate_properties: print(prop.key, type(prop).__name__)

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

"id ColumnProperty" "title ColumnProperty" "user_id ColumnProperty" "user RelationshipProperty"

Пример

Давайте отфильтруем только отношения и выведем их целевые классы:

from sqlalchemy import create_engine, String, ForeignKey from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, relationship from sqlalchemy.orm.properties import RelationshipProperty class Base(DeclarativeBase): pass class User(Base): __tablename__ = 'users' id: Mapped[int] = mapped_column(primary_key=True) name: Mapped[str] = mapped_column(String(100)) class Article(Base): __tablename__ = 'articles' id: Mapped[int] = mapped_column(primary_key=True) title: Mapped[str] = mapped_column(String(100)) user_id: Mapped[int] = mapped_column(ForeignKey('users.id')) user: Mapped[User] = relationship() engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) mapper = Article.__mapper__ for prop in mapper.iterate_properties: if isinstance(prop, RelationshipProperty): print(prop.key, '->', prop.mapper.class_.__name__)

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

"user -> User"

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

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