Google App EngineでQuery Cursorsを使ってみる。
Google App EngineのQueryクラスのcursor機能を使うと、
前回にfetchで取得したデータの続きを効率よく取得することが出来る。
使用するモデル
from google.appengine.ext import db
class Person(db.Model):
...
Personクラスには、positionの順に登録されている。
> q = Person.all().order('position')
> for p in q.fetch(5): print p.full_name
>
氏名0
氏名1
氏名2
氏名3
氏名4
続きのデータは次回に取得したい。
そこでカーソルを取得する。
> cursor = q.cursor()
memcacheにカーソルを記録しておく。(カーソルは文字列)
> from google.appengine.api import memcache
> memcache.set('person_cursor', cursor)
前回の続きからデータを取得しよう。
> r = Person.all().order('position')
memcacheに記録したカーソルを取り出し、Queryに設定する。
> cursor = memcache.get('person_cursor')
> r.with_cursor(cursor)
そうすると、前回にfetchした続きのデータを取得できる。
> for p in r.fetch(5): print p.full_name
>
氏名5
氏名6
氏名7
氏名8
氏名9
Google App Engineのドキュメントでは、日本語訳にはカーソルについての記述がない。
英語ドキュメントの「Query Cursors」を参照。