2012-09-25 62 views

回答

4

重寫該限制是不可能的。這是爲什麼。

當你做一個IN查詢where x in [n1, n2, n3],實際發生的是,3個獨立的查詢被提交給數據存儲:然後

where x = n1 
where x = n2 
where x = n3 

鍵生成的列表被合併到一起,刪除重複,給你最終的結果。

由於in列表中的每個項目都會創建一個單獨的實際數據存儲區查詢,並且每個GQL查詢的實際數據存儲區查詢數有30個限制,所以列表中限制爲30個項目。

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