0

我有一個查詢集: -Django的查詢集過濾性能

queryset = my_object.someobject_set.all() 

從那裏開始,我想從查詢集進行過濾。即:

print queryset.filter(name='some1').exists() 
print queryset.filter(name='some2').exists() 
print queryset.filter(name='some3').exists() 

但是對於每個篩選查詢,都有一個數據庫再次命中。我如何緩存查詢集,然後從中過濾?

我甚至嘗試做這個篩選之前評估查詢集: -

print len(queryset) 

但是,這是行不通的。 任何幫助?

+0

或者你的意思是這是3個不同的查詢? –

+0

是的我的意思是3個不同的查詢 –

+0

然後修復你的代碼 –

回答

2

這是不可能與Django的ORM。但你可以在Python中做到這一點。

queryset = list(my_object.someobject_set.all()) 

print list(filter(lambda i: i.name == 'some1', queryset)) 
print list(filter(lambda i: i.name == 'some2', queryset)) 
print list(filter(lambda i: i.name == 'some3', queryset)) 

這樣你就不會做任何額外的數據庫點擊。但是,如果這個查詢集真的比使用ORM更好,即使它碰到db。時間爲自己,看看哪一個更快

+1

無需將所有列存入內存。使用'only'來代替。 – itzMEonTV

+0

@itzmeontv我不確定他只是想檢查值是否存在。但是,是的,如果這隻需要檢查'唯一'是要走的路。 –

+0

你怎麼想的?循環遍歷列表並檢查字段與'存在'查詢db?從你的知識中回答? :) – itzMEonTV