ऐपइंजिन के साथ काम करते समय एक प्रमुख नकारात्मकता 1k क्वेरी सीमा थी, जिसका पहले से ही टिप्पणियों में उल्लेख किया गया है। मैंने जो उल्लेख नहीं किया है, वह यह तथ्य है कि एक अंतर्निहित क्रमबद्ध क्रम है, जिसके साथ आप इस मुद्दे के आसपास काम कर सकते हैं। appengine रसोई की किताब से:
def deepFetch(queryGen,key=None,batchSize = 100):
"""Iterator that yields an entity in batches.
Args:
queryGen: should return a Query object
key: used to .filter() for __key__
batchSize: how many entities to retrieve in one datastore call
Retrieved from http://tinyurl.com/d887ll (AppEngine cookbook).
"""
from google.appengine.ext import db
# AppEngine will not fetch more than 1000 results
batchSize = min(batchSize,1000)
query = None
done = False
count = 0
if key:
key = db.Key(key)
while not done:
print count
query = queryGen()
if key:
query.filter("__key__ > ",key)
results = query.fetch(batchSize)
for result in results:
count += 1
yield result
if batchSize > len(results):
done = True
else:
key = results[-1].key()
रिमोट एपीआई के साथ ऊपर कोड एक साथ (this article देखें) के रूप में आप की जरूरत है आप के रूप में कई संस्थाओं को पुनः प्राप्त करने की अनुमति देता है।
आप इस तरह से ऊपर कोड का उपयोग कर सकते हैं: पहले मैं एक ही दूसरों के रूप में जो GQL को एसक्यूएल से संक्रमित कर दिया अनुभव था पर
def allMyModel():
q = MyModel.all()
myModels = deepFetch(allMyModel)
स्रोत
2009-04-05 13:32:20
फिक्स्ड! http://stackoverflow.com/questions/264154/google-appengine-how-to-fetch-more-than-1000 –