我正在使用SQLAlchemy 我的情况是我有一个与另一个相关的表,但我想要的数据必须从相关的行计算。
所以我有一个看起来像这样的映射
class MyModel(BaseModel):
__tablename__ = "my_model"
my_id = Column(Integer, ForeignKey('other_table'), primary_key=True)
start_date = Column(Date, primary_key=True)
end_date = Column(Date, primary_key=True)
related_data = relationship(
RelatedModel,
foreign_keys=my_id,
primaryjoin="""and_(
MyModel.order_id == RelatedModel.order_id,
MyModel.start_date <= RelatedModel.date,
MyModel.end_date >= RelatedModel.date
)""",
lazy="select",
uselist=True
)
但是,我实际上大部分时间都需要的数据必须根据RelatedModel
中的数据计算得出。更具体地说,我想将数据集标准化(即将每个值除以整数的总和,使它们总和为1),这是由连接关系产生的。
我还希望在SQL中为了性能和准确性而计算规范化。
我可以使用窗口函数(使用POSTGRESQL)在查询中显式地执行此操作:
session.query(
sqlalchemy.sql.operators.div(
RelatedData.data,
func.sum(RelatedData.data).over())
).filter(
RelatedData.join_key == self.join_key,
).all()
能够在上面的关系的结果集中指定我想要那个计算列是很好的。有没有办法做到这一点?
由于