我的数据库中有一个总帐表,其中包含以下列:member_id
,is_credit
和amount
。我想得到会员的当前余额。
理想情况下,可以通过两个查询获得第一个查询的is_credit == True,第二个查询的is_credit == False接近:
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
然后减去结果。有没有办法在一个查询中进行上述运行以获得余额?
答案 0 :(得分: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通常会生成效率极低的查询,因为您提出了错误的问题。