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

Метод getter класса hybrid_property

Метод getter класса hybrid_property позволяет задать функцию, которая будет вызываться при обращении к гибридному свойству у экземпляра модели. Эта функция получает объект self и возвращает вычисленное значение. Метод используется как декоратор и принимает первым параметром функцию Python-уровня.

Гибридное свойство объединяет поведение обычного Python-свойства на уровне экземпляра и SQL-выражения на уровне класса. Метод getter отвечает именно за первую часть: он определяет, как значение вычисляется в Python.

Синтаксис

@hybrid_property def name(self): ... @name.getter def name(self): ...

Пример

Давайте создадим модель Article с гибридным свойством full_title, которое объединяет заголовок и статус:

from sqlalchemy import create_engine from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, Session from sqlalchemy.ext.hybrid import hybrid_property class Base(DeclarativeBase): pass class Article(Base): __tablename__ = 'articles' id: Mapped[int] = mapped_column(primary_key=True) title: Mapped[str] status: Mapped[str] @hybrid_property def full_title(self): return '[' + self.status + '] ' + self.title @full_title.getter def full_title(self): return self.status.upper() + ': ' + self.title engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) with Session(engine) as session: article = Article(title='article', status='published') session.add(article) session.commit() print(article.full_title)

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

"PUBLISHED: article"

Пример

Метод getter можно применить к гибридному свойству, объявленному отдельно, чтобы переопределить логику вычисления у экземпляра:

from sqlalchemy import create_engine from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, Session from sqlalchemy.ext.hybrid import hybrid_property class Base(DeclarativeBase): pass class Article(Base): __tablename__ = 'articles' id: Mapped[int] = mapped_column(primary_key=True) title: Mapped[str] text: Mapped[str] num: Mapped[int] @hybrid_property def summary(self): return self.title @summary.getter def summary(self): return self.title + ' (' + str(self.num) + ')' engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) with Session(engine) as session: article = Article(title='article', text='some text', num=5) session.add(article) session.commit() print(article.summary)

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

"article (5)"

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

  • класс hybrid_property,
    который создает гибридное свойство
  • метод setter,
    который задает функцию записи значения
  • метод expression,
    который задает SQL-выражение свойства
  • метод comparator,
    который настраивает сравнение свойства
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить