Ein großer Nachteil bei der Arbeit mit AppEngine war das 1k-Abfrage-Limit, das bereits in den Kommentaren erwähnt wurde. Was ich jedoch nicht erwähnt habe, ist die Tatsache, dass es eine eingebaute sortierbare Reihenfolge gibt, mit der Sie dieses Problem umgehen können. Vom appengine Kochbuch:
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()
Der obige Code zusammen mit Remote API (siehe this article) ermöglicht es Ihnen, so viele Einheiten abzurufen, wie Sie benötigen.
Sie können den obigen Code wie folgt verwendet werden:
def allMyModel():
q = MyModel.all()
myModels = deepFetch(allMyModel)
Behoben! http://stackoverflow.com/questions/264154/google-appengine-how-to-fetch-more-than-1000 –