абстрактным классом, но класс модель ругается на несовместимость метаклассов.
Есть ли какой-нибудь способ их совместить? В доке ничего не нашел. Судя по иерархии классов, для своего DeclarativeBase придется копировать какой-то технический код алхимии, чего делать особо не хочется
Ненавижу такие проблемы, но решается если не ошибаюсь только скрещиванием двух метаклассов в один. https://docs.sqlalchemy.org/en/20/orm/extensions/declarative/ - или вот для 0.7.3 существовало abstract поле
Эээ, AbstractConcreteBase это для реализации полиморфизма на уровне бд
class TimestampMixin(Base): __abstract__ = True created_at = Column(DateTime, default=current_timestamp()) updated_at = Column(DateTime, onupdate=current_timestamp()) class A(TimestampMixin, Base)
Убрать метакласс?
Так метакласс предоставляется алхимией, чтобы моедли создавать
Какой второй?
Несовместимость метаклассов. Значит их два
Первый метакласс — это метакласс алхимии, а второй — это ABCMeta
Ну вот второй тебе зачем?
Чтобы абстракный метод засунуть в миксин
Ну вот только Абц мета нужна лишь для рантайм проверок
Нинада совать абстракцию в миксины
Миксины имеют четкое поведение и обычно их не мешают с абстрактными классами
Точнее мешать их в абстрактный класс можно, но превращать совсем нежелательно
У меня есть миксин для таблиц, которые хранят историческое состояние. Этот миксин добавляет 5 полей, а также где-то 6 контрейнов и индексев. Для корректной работы всего остального кода, мне нужно доставать какие поля основной модели идентифицируют строку. То есть допустим, у меня есть таблица клиентов, у клиентов пк — это id. У меня есть таблица с историей состояния клиентов. Так вот мне надо указать, что поле id являлся пк у клиентов, чтобы потом правильно выстраивать историю
Обсуждают сегодня