让我们进行一项名为Weather
的科学实验,它记录有关天气的一般信息,其中一个是每分钟记录humidity
。比如说10个小时后,您将存储600个数据库值。
Weather.objects.filter().exclude(time__lt = commence).exclude(time__gt = cease)
这会在Weather
和commence
次之间为cease
表创建一个过滤器。
假设时间标准等于现在的-4小时,因此它将返回最后4小时的数据,其等于300个值。我怎么要求间隔10?意思是,从这300个值中,我将如何获得每个值的第10个,所以10,20,30,40 ...... 280,290,300 ......这意味着从过滤器返回30个值。
编辑:
是否可以要求间隔10秒?而不是每个人的第10个值..
答案 0 :(得分:2)
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
有三个参数,start,stop和step。例如:
>>> range(0, 100, 10)
[0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
在第二个示例中,范围表达式用于创建我们想要的样本的索引值。然后samples[s_num]
评估QuerySet以从数据库中获取该值。