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

Функция declarative_mixin

Функция declarative_mixin создает специальный базовый класс, который позволяет выносить общие колонки, связи и методы в отдельный миксин. Первый параметр принимает имя класса. В отличие от обычного наследования, миксин не создает отдельную таблицу, а его атрибуты встраиваются в таблицы дочерних моделей.

Синтаксис

declarative_mixin(cls)

Пример

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

from sqlalchemy import create_engine, String, Integer from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, declarative_mixin engine = create_engine('sqlite:///:memory:') @declarative_mixin class TimestampMixin: created_at: Mapped[str] = mapped_column(String, default='now') class Base(DeclarativeBase): pass class Article(TimestampMixin, Base): __tablename__ = 'articles' id: Mapped[int] = mapped_column(primary_key=True) title: Mapped[str] print(Article.__table__.columns.keys())

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

['id', 'title', 'created_at']

Пример

Давайте добавим в миксин не только колонки, но и общие методы для работы с объектами:

from sqlalchemy import create_engine, String, Integer from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, declarative_mixin, Session engine = create_engine('sqlite:///:memory:') @declarative_mixin class ReprMixin: def __repr__(self): return f"<{self.__class__.__name__}(title={self.title!r})>" class Base(DeclarativeBase): pass class Article(ReprMixin, Base): __tablename__ = 'articles' id: Mapped[int] = mapped_column(primary_key=True) title: Mapped[str] Base.metadata.create_all(engine) with Session(engine) as session: article = Article(title='article 1') session.add(article) session.commit() print(article)

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

"<Article(title='article 1')>"

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

  • класс DeclarativeBase,
    который представляет базовый класс для моделей
  • функцию declared_attr,
    которая позволяет создавать динамические атрибуты в миксинах
  • функцию declarative_base,
    которая создает базовый класс декларативной модели
  • класс Mapped,
    который используется для аннотации типов колонок
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить