SQLAlchemy中关系中的计算列

时间:2017-09-06 22:08:38

标签: python sql postgresql sqlalchemy

我正在使用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()

能够在上面的关系的结果集中指定我想要那个计算列是很好的。有没有办法做到这一点?

由于

0 个答案:

没有答案