0

У меня есть QuerySet: -Джанго производительность QuerySet фильтр

queryset = my_object.someobject_set.all() 

От там дальше, я хочу, чтобы отфильтровать из QuerySet. то есть:

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

Но для каждого из фильтрующих запросов снова появляется база данных. Как я могу кэшировать запрос и затем отфильтровывать его?

Я даже попытался оценить QuerySet перед фильтрацией, делая это: -

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

Таким образом, вы не будете делать никаких дополнительных удалений db. Но если этот запрос действительно большой, чем это лучше сделать с ORM, даже если он попадает в db. Время для себя и посмотреть, какой из них быстрее

+1

Не нужно брать все столбцы в память. вместо этого используйте 'only'. – itzMEonTV

+0

@itzmeontv Я не уверен, что он просто хочет проверить, существуют ли ценности или нет. Но да, если это нужно только для проверки 'only', это путь. –

+0

Что вы думаете? перебирать списки и проверять поле vs 'exists' на db? Ответ от ваших знаний? :) – itzMEonTV

Смежные вопросы