使用GAE的GQL IN过滤器超过30项?

时间:2012-09-25 09:02:08

标签: google-app-engine gql

IN过滤器限制为30件。是否有可能超越该限制?或者是否有可行的/推荐的解决方法?

2 个答案:

答案 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