0

은 내가 검색어 세트가 있습니다. 예 :장고의 검색어 필터 성능

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

장고 ORM으로는 불가능합니다. 하지만 파이썬에서는 그렇게 할 수 있습니다.

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)) 

이렇게하면 DB 히트를 추가하지 않습니다. 하지만이 쿼리 세트가 실제로 크다면 ORM을 사용하는 것이 더 좋을 것입니다. 시간을 들여서 어느 것이 더 빠르는지 확인하십시오

+1

모든 열을 메모리로 가져올 필요가 없습니다. 대신에'only'를 사용하십시오. – itzMEonTV

+0

@itzmeontv 값이 있는지 없는지 확인하고 싶지는 않습니다. 그러나 네, 단지 '오직'을 확인하는 데 필요한 경우 갈 방법입니다. –

+0

당신은 어떻게 생각하십니까? 목록 반복 및 필드에 대 한 검사 대 db '존재'쿼리? 귀하의 지식에서 대답? :) – itzMEonTV