Django ORM 和数据库

2024-06-24

当我做类似的事情时

I. objects = Model.objects.all()

and then

II. objects.filter(field_1=some_condition)

每次在步骤 2 时,我都会在各种条件下点击 db 。有没有什么方法可以在第一个操作中获取所有数据,然后只处理结果?


实际上,在评估 qs 之前,您不会访问数据库,查询是lazy https://docs.djangoproject.com/en/dev/topics/db/queries/#querysets-are-lazy.

阅读更多here https://docs.djangoproject.com/en/dev/ref/models/querysets/#when-querysets-are-evaluated.

edit:

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

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']
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django ORM 和数据库 的相关文章

随机推荐