(Примечание: в соответствии с призывом Stack Overflow обогащать
сообщество, отвечая на собственные вопросы, особенно после
вложения значительных усилий в устранение неполадок, я предоставив
ответ ниже, я с нетерпением приветствую дальнейшие комментарии, дополнительные
понимания или альтернативные подходы. Я также хотел бы
выразить признательность Ф. Казелли за ценную помощь в
SQLAlchemy! форум, который помог мне сузить поиск
решения.)
Здравствуйте, я пытаюсь создать столбец COMPUTED непосредственно в определении ORM с помощью
Код: Выделить всё
mapped_column()Я это знаю для базовой модели достаточно объявить таблицу следующим образом (Пример Toy, где «область» — это ВЫЧИСЛЯЕМЫЙ столбец):
Код: Выделить всё
square = Table(
"square",
metadata_obj,
Column("id", Integer, primary_key=True),
Column("side", Integer),
Column("area", Integer, Computed("side * side")),
)
Код: Выделить всё
CREATE TABLE square (
id SERIAL NOT NULL,
side INTEGER,
area INTEGER GENERATED ALWAYS AS (side * side) STORED,
PRIMARY KEY (id)
)
Я предполагал, что что-то вроде следующего может сработать, но это не сработало:
Код: Выделить всё
class Square(Base):
...
area: Mapped[int] = mapped_column(Computed("side*side"))
Я также зашел в @hybrid_property, но понимаю, что это не то же самое (так как мне нужно, чтобы вычисляемый столбец был частью определения DDL таблицы и @hybrid_property, кажется, оставляет вычисления во время выбора, но не как DDL).
Я был бы признателен, если бы кто-нибудь мог помочь мне правильно использовать Mapped_column() с Computed()!
Подробнее здесь: https://stackoverflow.com/questions/783 ... mns-in-orm