SqlAlchemy 2.0: проблемы с использованием Mapped_column() со столбцами Computed() в определениях таблиц ORM (не работаетPython

Программы на Python
Anonymous
SqlAlchemy 2.0: проблемы с использованием Mapped_column() со столбцами Computed() в определениях таблиц ORM (не работает

Сообщение Anonymous »


(Примечание: в соответствии с призывом Stack Overflow обогащать
сообщество, отвечая на собственные вопросы, особенно после
вложения значительных усилий в устранение неполадок, я предоставив
ответ ниже, я с нетерпением приветствую дальнейшие комментарии, дополнительные
понимания или альтернативные подходы. Я также хотел бы
выразить признательность Ф. Казелли за ценную помощь в
SQLAlchemy! форум, который помог мне сузить поиск
решения.)

Здравствуйте, я пытаюсь создать столбец COMPUTED непосредственно в определении ORM с помощью

Код: Выделить всё

mapped_column()
[/b] в SqlAlchemy 2.0, но мне это не удалось (я проверил Google и попытался найти ответ в документации).
Я это знаю для базовой модели достаточно объявить таблицу следующим образом (Пример Toy, где «область» — это ВЫЧИСЛЯЕМЫЙ столбец):

Код: Выделить всё

square = Table(
"square",
metadata_obj,
Column("id", Integer, primary_key=True),
Column("side", Integer),
Column("area", Integer, Computed("side * side")),
)
Это эквивалентно следующему оператору SQL DDL (Postgresql >12):

Код: Выделить всё

CREATE TABLE square (
id SERIAL NOT NULL,
side INTEGER,
area INTEGER GENERATED ALWAYS AS (side * side) STORED,
PRIMARY KEY (id)
)
Однако при попытке сделать эквивалент в ORM с использованием Mapped[] и mapped_column() я не могу чтобы найти решение.
Я предполагал, что что-то вроде следующего может сработать, но это не сработало:

Код: Выделить всё

class Square(Base):
...
area: Mapped[int] = mapped_column(Computed("side*side"))
До этого я также пробовал другие конфигурации, такие как передача Computed() как server_default= и использование FetchedValue, но во всех случаях , я столкнулся с ошибками.
Я также зашел в @hybrid_property, но понимаю, что это не то же самое (так как мне нужно, чтобы вычисляемый столбец был частью определения DDL таблицы и @hybrid_property, кажется, оставляет вычисления во время выбора, но не как DDL).
Я был бы признателен, если бы кто-нибудь мог помочь мне правильно использовать Mapped_column() с Computed()!

Подробнее здесь: https://stackoverflow.com/questions/783 ... mns-in-orm

Вернуться в «Python»