当我做类似的事情

I. objects = Model.objects.all()
然后

二。 objects.filter(field_1=some_condition)
每当在第2步中遇到各种情况时,我都会命中db。有什么办法可以让所有数据都先采取行动,然后再照顾结果呢?

最佳答案

在评估qs之前,您实际上并没有访问数据库,查询是 lazy

阅读更多 here

编辑:

重新阅读您的问题后,很明显,您在询问在针对不同条件进行过滤时如何防止数据库命中。

qs = SomeModel.objects.all()

qs1 = qs.filter(some_field='some_value')
qs2 = qs.filter(some_field='some_other_value')

通常,您希望数据库为您进行过滤。

您可以通过将qs转换为列表来对其求值。这将防止进一步的数据库命中,但是可能比让数据库返回结果更糟。
qs_l = list(qs)
qs1_l = [element for element in qs_l if element.some_field='some_value']
qs2_l = [element for element in qs_l if element.some_field='some_other_value']

关于Django ORM并命中数据库,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5989499/

10-09 05:40
查看更多