Я использую SQLAlchemy для сопоставления класса:
class Model(sqlalchemy.declarative_base()):
attr_a = Column(String)
attr_b = Column(Integer)
attr_c = Column(Integer)
aggr = column_property(attr_b + attr_c IF attr_a=='go' ELSE attr_b - attr_c)
Последняя строка — это псевдокод, который требует некоторой условной логики. Возможна ли такая логика внутри column_property? Как я могу реализовать его как простой условный агрегат?
На самом деле это обычная техника, sqlalchemy предоставляет набор инструментов внутри sqlalchemy.sql
, можно легко написать логику SQL, например case:
from sqlalchemy.sql import case
...
aggr = column_property(case([(attr_a= = "go", attr_b + attr_c), (attr_a= = "return", attr_b + attr_c + attrition]
Просто обратите внимание, что case
принимает итерацию Python в качестве параметра.
Не уверен здесь, но вам может понадобиться создать триггер, который срабатывает перед вставкой, чтобы заполнить aggr. Вот ссылка на создание триггеров: docs.sqlalchemy.org/en/14/core/ddl.html