私は自分のアプリにカーソルを適用しようとしていますが、文書が私にとって十分にはっきりしていません。最後の結果が返された後、カーソル http://code.google.com/appengine/docs/python/datastore/queries.html#Query_Cursors"カーソル"を正しく理解する方法
ため Googleの説明は、カーソルの位置は、結果リスト内の位置として定義されます。カーソルはリスト内の相対位置ではありません(オフセットではありません)。結果のインデックススキャンを開始するときにデータストアがジャンプできるマーカーです。クエリの結果がカーソルの使用の間で変更された場合、クエリはカーソルの後の結果で発生する変更のみに注目します。クエリのカーソル位置の前に新しい結果が表示された場合は、カーソルの後に結果が取得されたときに新しい結果が返されません。同様に、エンティティがクエリの結果ではなくカーソルの前に現れた場合、カーソルの後に表示される結果は変更されません。返された最後の結果が結果セットから削除された場合、カーソルは引き続き次の結果の検索方法を認識します。
私の理解では、クエリ結果は常にデフォルトの順序(__ key __など)で返されるようです。次に、指定カーソルを使用して、このカーソルの前のすべての結果をフィルターに掛けるフィルターを追加します。ちょうどGoogleが過去に言及したように。本当?
__ __キーとページングと非ユニークな特性 http://code.google.com/appengine/articles/paging.html
もう一つの問題は、反復またはタスクに使用するカーソルができますか? 何らかの理由で、この機能が正しく動作しません。 通常、反復プロセスで「クエリが見つかりません」が生成されることがあります。
これは私の例です:
people = Person.all().filter("age > ", 30)
if cursor:
people.with_cursor(cursor)
try:
for person in people: # query not found
cursor = people.cursor()
except DeadlineExceededError:
taskqueue.add(url="/people", params= {"cursor", cursor})