Twitterもどきを作りながらGoogle App Engineの肝データストアを理解する

白石俊平(あゆた)
2008-04-14 17:00:00
  • このエントリーをはてなブックマークに追加

Queryクラスを使用した問い合わせ

 文字列としてGQLを組み立てる以外にも、google.appengine.ext.db.Queryを用いた問い合わせを行うこともできる。Queryのインスタンスを得るには、エンティティが持つall()メソッドを使用するのが簡単だ。

q = Message.all()

 このクエリをこのまま使用すると、すべてのエンティティを取得することになる。フィルタを用いた絞り込みや、プロパティを指定して並べ替えを行うこともできる。

q.filter("author=", user)
q.order("-date") # マイナスをつけると降順に

 また、filter()やorder()の戻り値はQueryオブジェクト自身(self)となっているので、次のようにコードを書くこともできる。

q = Message.all().filter("author=",user).order("-date")

問い合わせ結果の利用

 さて、クエリの組み立て方としてGqlQueryかQueryを使用するという方法を学んだわけであるが、問い合わせを行った結果を利用するにはどうしたら良いのだろうか。

方法は以下の二通りだ。

  1. for文などでイテレートする
  2. fetch()メソッドを使用する

1の方法を用いると、「結果をフェッチする」という処理を書くことなく、いきなり繰り返し処理を行える。以下のコードを見てほしい。

# 全メッセージをループ処理
for message in GqlQuery("SELECT * FROM Message"):
    ...(略)...

2の方法では、fetch()した結果をエンティティのリストとして扱うことができる。

# fetch()の引数は、取得件数のリミット
messages = Message.all().fetch(20)
for message in messages:
    ...(略)...

どちらの方法を利用するかは、完全にお好み次第だ。

まとめ

 以上、データストアに関する基本的なプログラミングに関して、駆け足でお伝えしてきたが、いかがだっただろうか。O/Rマッピング技術などに精通した技術者であれば、何の苦もなく操ることができ、非常に開発効率も良い。たったこれだけの開発工数で、Googleのスケーラビリティを享受できると言うのは驚愕に値する、と言えるだろう。

 では、次ページに今回使用したサンプルコードを全文掲載する。興味のある方は、これらのコードを「builder-example3」というディレクトリにコピペして保存し、「dev_appserver.py builder-example3/」というコマンドで実行してみていただきたい。

このサイトでは、利用状況の把握や広告配信などのために、Cookieなどを使用してアクセスデータを取得・利用しています。 これ以降ページを遷移した場合、Cookieなどの設定や使用に同意したことになります。
Cookieなどの設定や使用の詳細、オプトアウトについては詳細をご覧ください。
[ 閉じる ]