Python 可以连接查询集吗?
搜索数据库后,我得到一个查询集数组。我想连接这些查询集,就像我们可以使用列表元素一样。这是可能的还是有更好的方法?这里的最终目标是为包含字段中一组字符串之一的表行获取querysetPython 可以连接查询集吗?,python,django,Python,Django,搜索数据库后,我得到一个查询集数组。我想连接这些查询集,就像我们可以使用列表元素一样。这是可能的还是有更好的方法?这里的最终目标是为包含字段中一组字符串之一的表行获取queryset for i in range(0,(searchDiff+1)): filterString = str(int(searchRange[0]) + i) myQuerySetTwoD.append(my.objects.filter(asn=filterString)) for j in
for i in range(0,(searchDiff+1)):
filterString = str(int(searchRange[0]) + i)
myQuerySetTwoD.append(my.objects.filter(asn=filterString))
for j in range(0,(len(myQuerySetTwoD)-1)):
myQuerySet = myQuerySet + myQuerySetTwoD[j]
更新:找到了我自己的答案(可能是关于写下问题的内容)
只是
然后替换
myQuerySet = myQuerySet + myQuerySetTwoD[j]
与
你的代码看起来很奇怪!我不知道它是如何工作的,也不知道您在这里做什么,但以下是我将如何执行查询操作:
from django.db.models import Q
myQuery = Q()
for i in range(0,(searchDiff+1)):
filterString = str(int(searchRange[0]) + i)
myQueryTwoD.append(Q(asn=filterString))
for j in range(0,(len(myQueryTwoD)-1)):
myQuery = myQuery | myQueryTwoD[j]
myQuerySet = my.objects.filter(myQuery)
它是如何工作的
Blagh.objects.filter(Q(smth='A') | Q(smth='B'))
will generate query which looks like:
SELECT ... from blagh WHERE smth = 'A' OR smth = 'B'
看看django文档:
使用itertools
的方法将导致对数据库的许多查询。在我的解决方案中,它将是一个带有或查找WHERE
子句的查询
更新:
也许更好的解决方案是这样的:
strings = []
for i in range(0,(searchDiff+1)):
filterString = str(int(searchRange[0]) + i)
strings.append(filterString)
my_query_set = MyModel.objects.filter(arn__in=strings)
我不明白为什么需要内部循环…我认为正确的方法是使用
操作符(即,如果查询集属于同一类型):
为什么有内环呢?当我卡在“链”中时,它几乎可以正常工作,但你完全纠正了效率。最好使查询更加智能化,而不是运行多个查询的循环。谢谢,这帮了大忙。忽略我的代码。你上面所说的正是我所需要的。我刚在那里试过。一个问题。这个房间很整洁。我想我也可以对多个Q()进行OR运算,但我也很难让它工作__他第一次工作。
Blagh.objects.filter(Q(smth='A') | Q(smth='B'))
will generate query which looks like:
SELECT ... from blagh WHERE smth = 'A' OR smth = 'B'
strings = []
for i in range(0,(searchDiff+1)):
filterString = str(int(searchRange[0]) + i)
strings.append(filterString)
my_query_set = MyModel.objects.filter(arn__in=strings)
qset = MyModel.objects.none()
for filterString in list_of_filterStrings:
qset_temp = MyModel.objects.filter(asn=filterString)
qset = qset | qset_temp