Bin*_*mar 2 django django-queryset
我有这个问题
query = 'select * from products where (productnr, supplier_id) in (%s)' % product_list
Run Code Online (Sandbox Code Playgroud)
product_list看起来像这样((OB520,3),(RH402,20)...)
如何使用queryset和__in过滤器在Django中执行此操作
这有什么令人困惑的?http://docs.djangoproject.com/en/1.2/ref/models/querysets/#in看来很清楚.
从问题到底是什么问题并不完全清楚.
您是否在询问如何使用多部分密钥?如果是这样,你会对简单不满意__in.
如果您正在尝试查找由两部分组成的键的"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))
Run Code Online (Sandbox Code Playgroud)
如果您正在尝试进行多键查找,那么这就是它必须工作的方式.
或者,您的"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)
Run Code Online (Sandbox Code Playgroud)
以上是未经测试的.而且,它可能效率低下.
什么是更好的是这样的.
def values_iter( some_list_of_pairs ):
for p, s in some_list_of_pairs
yield product_list.get(productnr=p, supplier_id=s)
Run Code Online (Sandbox Code Playgroud)
这将一次执行一些非常有效的SQL查找.这可能比构建复杂的多键IN子句执行得更快.
| 归档时间: |
|
| 查看次数: |
5427 次 |
| 最近记录: |