让我们进行一个名为Weather的科学实验,它记录有关天气的一般信息,其中之一是每分钟记录一次humidity。在说了10个小时之后,您将存储600个数据库值。

Weather.objects.filter().exclude(time__lt = commence).exclude(time__gt = cease)


这将在Weathercommence时间之间为cease表创建一个过滤器。

假设时间标准等于从现在开始的-4小时,因此它将返回最后4小时的数据,该数据等于300个值。我如何要求间隔为10?意思是,从这300个值中,我将如何接收每个值的第十个值,所以10、20、30、40 ... 280、290、300 ...将意味着从过滤器中返回30个值。

编辑:

是否可以要求间隔10秒?与每个单独的第十个值相对。

最佳答案

SQL没有十分之一的要求,因此ORM通常不会为您提供一种表达需求的方法。您可以在Python中完成该工作:

samples = list(Weather.objects.filter().exclude(time__lt=commence).exclude(time__gt=cease))
for s10 in samples[::10]:
    # do something with every tenth...


这将在一次查询中从数据库中提取所有样本,然后仅使用其中的10%。您也可以只将需要的那些信息拉到查询中:

sample_count = 600 # Somehow determine how many samples are in your time window.
samples = Weather.objects.filter().exclude(time__lt=commence).exclude(time__gt=cease)
for s_num in range(0, sample_count, 10):
    s = samples[s_num]
    # Now you have one sample in s.


详细说明:range接受三个参数,开始,停止和步进。例如:

>>> range(0, 100, 10)
[0, 10, 20, 30, 40, 50, 60, 70, 80, 90]


在第二个示例中,范围表达式用于创建所需样本的索引值。然后samples[s_num]评估QuerySet以从数据库中获取该值。

10-06 14:24
查看更多