0

I have a general ledger table in my DB with the columns: member_id, is_credit and amount. I want to get the current balance of the member.

Ideally that can be got by two queries where the first query has is_credit == True and the second query is_credit == False something close to:

credit_amount = session.query(func.sum(Funds.amount).label('Debit_Amount')).filter(Funds.member_id==member_id, Funds.is_credit==True)

debit_amount = session.query(func.sum(Funds.amount).label('Debit_Amount')).filter(Funds.member_id==member_id, Funds.is_credit==False)

balance = credit_amount - debit_amount

and then subtract the result. Is there a way to have the above run in one query to give the balance?

4

1 回答 1

0

根据您所说的混合动力现在太先进的评论,所以我将提出一个更简单但效率不高的解决方案(仍然可以):

(session.query(Funds.is_credit, func.sum(Funds.amount).label('Debit_Amount')).
 filter(Funds.member_d==member_id).group_by(Funds.is_credit))

这会做什么?您将收到两行结果,一个是贷方,另一个是借方,具体取决于is_credit结果的属性。第二部分 ( Debit_Amount) 将是值。然后,您评估它们以获得结果:只有一个查询同时获取两个值。

如果你不确定是做什么group_by的,我建议你在使用 SQLAlchemy 之前阅读 SQL。SQLAlchemy 提供了非常简单的 SQL 用法,但它要求您也了解 SQL。因此,我建议:首先在 SQL 中构建一个查询并查看它是否执行您想要的操作 - 然后将其转换为 SQLAlchemy 并查看它是否执行相同操作。否则 SQLAlchemy 经常会生成效率非常低的查询,因为你请求了错误的东西。

于 2013-08-21T20:09:58.910 回答