【发布时间】:2018-07-25 05:04:10
【问题描述】:
我们运行 Postgres 9.6.5 和 Django 2.0。我们有一个Model 字段created_at 和value。我们需要计算某个date_range 的 90 天移动平均线。我们就是这样做的:
output = []
for i in range(len(date_range)):
output.append(
Model.objects.filter(
created_at__date__range=(date_range[i]-timezone.timedelta(days=90), date_range[i]),
).aggregate(Avg('value'))['value__avg'].days
)
这使用Avg 聚合函数,因此速度相当快,但是我们需要对date_range 中的每个日期进行一次查询。对于更长的范围,这意味着很多查询。
Postgres can do this in a single query。我的问题是 - 我们可以使用 Django ORM 在单个查询中以某种方式做到这一点吗?
(我知道我可以使用 Django ORM 执行原始 SQL,但我想尽可能避免这种情况,这就是我问的原因。)
【问题讨论】:
标签: django postgresql django-models django-orm django-postgresql