【发布时间】:2016-10-07 06:03:03
【问题描述】:
我习惯于通过 ORM 进行 Django 查询,但我得到的代码使用了所有 SQL。
我需要能够获取日期范围内定义的特定代理的所有交易合计的总金额。
cursor = connection.cursor()
cursor.execute(
"""
SELECT a.*, COUNT(t.*) as transactions
FROM agent a
JOIN transaction t ON t.agent_id = a.id
WHERE t.date_created >= %s AND t.date_created < %s and t.status in %s AND a.state = %s
GROUP BY a.id
""", [startdate, enddate, config.TX_STATUSES, selectedstate])
context['agents'] = util.raw_query_dict(cursor)
如果我使用的是 Django ORM,我会使用 .aggregate(Sum(...)) 并将聚合的事务值合并到每个代理。
无论如何我都可以在 SQL 代码中执行此操作吗?
更新
我需要实际聚合Transaction模型的某个字段的总和。
class Transaction(models.Model):
source_amount = MoneyField(max_digits=10, decimal_places=2, default_currency='USD')
现在,@C14L 建议的这个 SQL 查询为我提供了在某个时间范围内适用于某个代理的事务总数。我需要将Transaction 模型中的 source_amount 字段的总量加在一起,如上图所示。我怎样才能做到这一点?
【问题讨论】:
-
从那里跑!使用 MyModel.objects.raw() 进行原始查询很好,因为在 ORM 中很难编写相同的查询,但获取游标并调用 execute Sheesh 可能根本不使用 djang。无论如何回答你的问题。用总和替换该计数
标签: sql django postgresql