gpt4 book ai didi

django - django 查询集中的两个或多个 __in 过滤器

转载 作者:行者123 更新时间:2023-12-03 04:34:22 26 4
gpt4 key购买 nike

我有这个查询

query = 'select * from products where (productnr, supplier_id) in (%s)' % product_list

其中,product_list 如下所示 ((OB520, 3),(RH402, 20)...)

如何使用查询集和 __in 过滤器在 Django 中执行此操作

最佳答案

哪一部分令人困惑? http://docs.djangoproject.com/en/1.2/ref/models/querysets/#in看起来很清楚。

从问题中还不能完全清楚问题所在。

您是想问如何使用多部分 key 吗?如果是这样,您将对简单的 __in 感到不满意。

如果您尝试查找由两部分组成的 key 的“OR”,则必须创建更复杂的条件。

从这里开始:http://docs.djangoproject.com/en/1.2/topics/db/queries/#complex-lookups-with-q-objects

from django.db.models import Q
product_list.filter(
Q(productnr='OB520', supplier_id=3) | Q(productnr='RH402', supplier_id=20))

如果您尝试进行多键查找,这就是它的工作方式。

或者,问题是您的“in”子句有一长串特定值吗?

如果您的列表很长,您可能需要分段构建查询。

q_obj= Q()
for p, s in some_list_of_pairs;
q_obj |= Q(productnr=p, supplier_id=s )
product_list.filter(q_obj)

以上未经测试。而且,它可能效率低下。

更好的是像这样的东西。

def values_iter( some_list_of_pairs ):
for p, s in some_list_of_pairs
yield product_list.get(productnr=p, supplier_id=s)

这将一次执行许多非常高效的 SQL 查找。这可能比构建复杂的多键 IN 子句执行得更快。

关于django - django 查询集中的两个或多个 __in 过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4600402/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com