IN
过滤器限制为30件。是否有可能超越该限制?或者是否有可行的/推荐的解决方法?
答案 0 :(得分:4)
无法覆盖该限制。这就是原因。
当您对IN
执行where x in [n1, n2, n3]
查询时,实际发生的是将3个单独的查询提交到数据存储区:
where x = n1
where x = n2
where x = n3
然后将生成的键列表合并在一起,删除重复项,以便为您提供最终结果。
由于in
列表中的每个项目都创建了单独的实际数据存储区查询,并且每个GQL查询限制为30个实际数据存储区查询,因此列表中的项目限制为30个。
答案 1 :(得分:0)
如上所述,您只能在查询中获得30个项目,因为查询是在30个并行的不同查询中解释的。一种解决方法是发出30个项目的连续请求,如下例所示
offset = 0
item_count = len(keys)
result = []
while offset < item_count:
data = Entity.all().filter('key IN', keys[offset:30])
result.extend(data)
offset += 30
return result