【问题标题】:Django queryset aggregate by time intervalDjango 查询集按时间间隔聚合
【发布时间】:2012-04-14 14:05:30
【问题描述】:

您好,我正在编写一个 Django 视图,该视图输出数据以在客户端进行绘图(高图表)。数据是具有给定参数的气候数据,每天记录一次。

我的查询是这样的:

format = '%Y-%m-%d' 
sd = datetime.datetime.strptime(startdate, format)
ed = datetime.datetime.strptime(enddate, format)

data = Climate.objects.filter(recorded_on__range = (sd, ed)).order_by('recorded_on')

现在,随着范围的增加,数据集显然变大了,这在图表上表现不佳(除了大大减慢速度)。

有没有办法将我的数据分组为时间段的平均值 - 特别是每个月的平均值或每年的平均值?

我意识到这可以在 SQL 中完成,如下所述:django aggregation to lower resolution using grouping by a date range

但我想知道 Django 本身是否有方便的方法。

或者直接修改数据库并使用脚本从时间戳填充月份和年份字段是否更好?

非常感谢任何帮助。

【问题讨论】:

    标签: django datetime django-queryset


    【解决方案1】:

    您是否尝试过使用 django-qsstats-magic (https://github.com/kmike/django-qsstats-magic)?

    它使绘制图表变得非常容易,这是他们文档中的一个时间序列示例:

    from django.contrib.auth.models import User
    import datetime, qsstats
    
    qs = User.objects.all()
    qss = qsstats.QuerySetStats(qs, 'date_joined')
    
    today = datetime.date.today()
    seven_days_ago = today - datetime.timedelta(days=7)
    
    time_series = qss.time_series(seven_days_ago, today)
    print 'New users in the last 7 days: %s' % [t[1] for t in time_series]
    

    【讨论】:

    • 嗯。看起来很有希望 - 我会看看。
    • 这种类型的查询在普通的 Django 中是否可行?
    • 是的,你可以使用 User.objects.filter().aggregate();参考官方文档:docs.djangoproject.com/en/dev/topics/db/aggregation
    • 是的。我看过文档。不过,我仍然不确定您如何汇总不同的时间间隔。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多