让我们进行一个名为Weather
的科学实验,它记录有关天气的一般信息,其中之一是每分钟记录一次humidity
。在说了10个小时之后,您将存储600个数据库值。
Weather.objects.filter().exclude(time__lt = commence).exclude(time__gt = cease)
这将在
Weather
和commence
时间之间为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以从数据库中获取该值。