Google App EngineでQuery Cursorsを使ってみる。

Google App EngineでQuery Cursorsを使ってみる。 « 山本隆の開発日誌」より。


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」を参照。