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

Атрибут relationships класса Mapper

Атрибут relationships класса Mapper возвращает словарь всех связей, настроенных для отображаемого класса. Ключами словаря выступают имена атрибутов-связей, а значениями - объекты RelationshipProperty, описывающие параметры каждой связи: целевую модель, внешний ключ, направление и стратегию загрузки. Атрибут доступен через экземпляр Mapper, который можно получить по классу модели.

Синтаксис

Mapper.relationships

Пример

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

from sqlalchemy import 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] articles: Mapped[list['Article']] = relationship(back_populates='user') class Article(Base): __tablename__ = 'articles' id: Mapped[int] = mapped_column(primary_key=True) title: Mapped[str] user_id: Mapped[int] = mapped_column(ForeignKey('users.id')) user: Mapped['User'] = relationship(back_populates='articles')

Теперь выведем имена всех связей модели Article:

from sqlalchemy import 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] articles: Mapped[list['Article']] = relationship(back_populates='user') class Article(Base): __tablename__ = 'articles' id: Mapped[int] = mapped_column(primary_key=True) title: Mapped[str] user_id: Mapped[int] = mapped_column(ForeignKey('users.id')) user: Mapped['User'] = relationship(back_populates='articles') print(list(Article.__mapper__.relationships.keys()))

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

['user']

Пример

Давайте выведем имена связей модели User:

from sqlalchemy import 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] articles: Mapped[list['Article']] = relationship(back_populates='user') class Article(Base): __tablename__ = 'articles' id: Mapped[int] = mapped_column(primary_key=True) title: Mapped[str] user_id: Mapped[int] = mapped_column(ForeignKey('users.id')) user: Mapped['User'] = relationship(back_populates='articles') print(list(User.__mapper__.relationships.keys()))

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

['articles']

Пример

Давайте обратимся к конкретной связи и посмотрим ее целевой класс:

from sqlalchemy import 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] articles: Mapped[list['Article']] = relationship(back_populates='user') class Article(Base): __tablename__ = 'articles' id: Mapped[int] = mapped_column(primary_key=True) title: Mapped[str] user_id: Mapped[int] = mapped_column(ForeignKey('users.id')) user: Mapped['User'] = relationship(back_populates='articles') rel = Article.__mapper__.relationships['user'] print(rel.mapper.class_) print(rel.uselist)

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

<class 'models.User'> False

Свойство uselist равно False, потому что связь user возвращает один объект, а не коллекцию.

Пример

Давайте переберем все связи модели и выведем их параметры:

from sqlalchemy import 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] articles: Mapped[list['Article']] = relationship(back_populates='user') class Article(Base): __tablename__ = 'articles' id: Mapped[int] = mapped_column(primary_key=True) title: Mapped[str] user_id: Mapped[int] = mapped_column(ForeignKey('users.id')) user: Mapped['User'] = relationship(back_populates='articles') for name, rel in User.__mapper__.relationships.items(): print(name, rel.mapper.class_.__name__, rel.uselist)

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

"articles Article True"

Свойство uselist равно True, потому что связь articles возвращает коллекцию объектов.

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

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