Twitterもどきを作りながらGoogle App Engineの肝データストアを理解する
今回はTwitter(もどき)を作りながらGoogle App Engineを利用する最大の目的ともいえる「データストア」について説明しよう。
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を使用するという方法を学んだわけであるが、問い合わせを行った結果を利用するにはどうしたら良いのだろうか。
方法は以下の二通りだ。
- for文などでイテレートする
- 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/」というコマンドで実行してみていただきたい。
- 特集: Google App Engine詳解 (3件)
- 今日のトップ記事
- 2日前
- 4日前
- 6日前
- 7日前
- ホワイトペーパー
- 読者投票
- 話題のタグ
より多くのコスト削減に向けて、BEAの効果的なアプローチをご紹介いたします。詳しくはホワイトペーパーをご覧ください。
MS、Vistaとの互換性をチェックできる「Compatibility Center」リリースへ
「似非」SOAを見破る10の方法
Firefox 3のアドオンやテーマ管理を容易にする
openSUSE 11.0を試してみた
フォトレポート:世界各国の優秀な技術者がパリに集結--Imagine Cup 2008世界大会
バッチ処理でデータベース活用:4つの課題と5つの解決ポイント
Rubyでどう書く?:RubyでWord文書を作成する
「未来の、その先」をどう提言していくか
Techno Exchange
DELL連載第4回〜「Microsoft System Center」
今知るべき仮想化情報
ZDNet Japan Green IT