2009-11-17 75 views
1

假設您有一個科學實驗叫Weather,它記錄了有關天氣,其中之一是記錄每分鐘humidity的一般信息。說了10個小時後,您將有600個數據庫值存儲。調度器與時間間隔

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

這將創建爲Weather表過濾器時,commencecease倍之間。

比方說,時間標準是等於從目前-4小時,因此它會返回最後4小時的價值等於300個值數據。我將如何要求10的時間間隔?含義,從這些值300,我將如何接收每個的第十一個,所以10,20,30,40 ... 280,290,300 ...這將意味着30個值被從過濾器返回。

編輯:

是否有可能要求說10秒的時間間隔?相對於每個個體10值..

回答

2

SQL沒有辦法,要求每十,所以奧姆斯通常不會給你一種方式來表達這種需求。您可以在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]評估查詢集得到的只是從數據庫中一個值。

+0

你能可能解釋什麼'有效範圍內的s_num(0,sample_count,10); s =樣本[s_num]'在那裏做什麼?它完全消失在我的頭上! – Federer

+0

我加了一點。 –