Django 查询集过滤性能

Django queryset filter performance

我有一个查询集:-

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)

但这行不通。 有帮助吗??

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。自己计时,看看哪个更快