Python Sqlalchemy列_属性数学

Python Sqlalchemy列_属性数学,python,sql,sqlalchemy,Python,Sql,Sqlalchemy,我正在使用发票和付款模型,试图根据发票的付款情况确定发票应支付的金额 利用Sqlalchemy的专栏文章_property,我提出了以下内容: # Total amount for an Invoice Invoice.total_rands = column_property( select([func.sum(InvoiceProduct.sub_total_rands)]).where(InvoiceProduct.invoice_id==Invoice.id).correlate

我正在使用发票和付款模型,试图根据发票的付款情况确定发票应支付的金额

利用Sqlalchemy的专栏文章_property,我提出了以下内容:

# Total amount for an Invoice
Invoice.total_rands = column_property(
    select([func.sum(InvoiceProduct.sub_total_rands)]).where(InvoiceProduct.invoice_id==Invoice.id).correlate(Invoice)
)

# Total amount which needs to be paid.
Invoice.amount_due_rands = column_property(
    Invoice.total_rands - select([func.sum(Payment.amount_rands)]).where(Payment.invoice_id==Invoice.id).correlate(Invoice)
)
上述代码的问题在于,如果发票没有付款,则发票的“到期金额”为零且不等于Invoice.total\u rands

所以我想我有两个问题:

  • 如何(使用我当前的解决方案)获得发票.amount\u due\u rands column\u Property return Invoice.total\u rands(如果没有发票付款)

  • 我还能怎么解决这个问题呢


  • 发票.应付金额\u rands=列\u属性( Invoice.total\u rands-选择([func.coalesce(func.sum(Payment.amount\u rands),0)])。其中(Payment.Invoice\u id==Invoice.id)。关联(发票)
    )

    谢谢你,func。我一直在寻找coalesce。