複数モデルの連携処理 (1/6)
作成:2010-01-08 10:33
更新:2010-05-10 21:47
更新:2010-05-10 21:47
■SQLとデータストアの違い
データベースを利用するアプリケーションの場合、1つのテーブルだけで完結することというのはあまりありません。いくつものテーブルを用意し、それらを関連付けて処理することの方が圧倒的に多いでしょう。
Google App Engineでデータストアを利用する場合も同様です。1つのモデルだけで済むアプリケーションというのはそう多くはありません。いくつものモデルを用意し、それらを関連付けて処理することの方が多いでしょう。
SQLデータベースの場合、こうした「複数テーブルの関連」のためには、専用の「JOIN」と呼ばれる機能が用意されています。このJOINを利用してクエリーを作成し送信することで、関連する複数のテーブルから必要なデータを取り出すことが可能です。既にSQLデータベースを使ったことがあるなら、改めて説明するまでもないでしょう。多くのWeb開発者は、「データベース=SQL」という前提で開発をしているのではないでしょうか。
が、データストアは、SQLデータベースではありません。GQLという簡易問い合わせ言語を持ってはいますが、これには、実は「JOIN」に相当する機能はないのです。「JOINがない」と聞いて、一瞬、途方に暮れた人もいるでしょうが、まあ待ってください。
ではどうやって複数のモデルを連携処理するのか。それには「オブジェクトの参照」を利用するのです。データストアは、オブジェクトとして用意したデータをそのまま保管します。オブジェクトは、Pythonのクラスとして定義し、インスタンスとしてデータを作成します。つまり、Pythonのオブジェクト指向のオブジェクトがそのまま使われるわけです。この点を忘れてはいけません。
クラスの中で、他のクラスのオブジェクトを保管したければ? そのオブジェクトを保持するプロパティを用意すればいいだけです。モデルもまったく同じです。
モデルクラスには、プロパティの値として「ReferenceProperty」というものが用意されています。これは、他のモデルの参照(reference)を保持するためのプロパティです。これを使って関連するモデルを保管するプロパティを用意すれば、簡単に「関連するモデルを保持する」ことができます。SQLのように、「JOINを使って……」などと難しく考える必要はまったくありません。
Google App Engineでデータストアを利用する場合も同様です。1つのモデルだけで済むアプリケーションというのはそう多くはありません。いくつものモデルを用意し、それらを関連付けて処理することの方が多いでしょう。
SQLデータベースの場合、こうした「複数テーブルの関連」のためには、専用の「JOIN」と呼ばれる機能が用意されています。このJOINを利用してクエリーを作成し送信することで、関連する複数のテーブルから必要なデータを取り出すことが可能です。既にSQLデータベースを使ったことがあるなら、改めて説明するまでもないでしょう。多くのWeb開発者は、「データベース=SQL」という前提で開発をしているのではないでしょうか。
が、データストアは、SQLデータベースではありません。GQLという簡易問い合わせ言語を持ってはいますが、これには、実は「JOIN」に相当する機能はないのです。「JOINがない」と聞いて、一瞬、途方に暮れた人もいるでしょうが、まあ待ってください。
ではどうやって複数のモデルを連携処理するのか。それには「オブジェクトの参照」を利用するのです。データストアは、オブジェクトとして用意したデータをそのまま保管します。オブジェクトは、Pythonのクラスとして定義し、インスタンスとしてデータを作成します。つまり、Pythonのオブジェクト指向のオブジェクトがそのまま使われるわけです。この点を忘れてはいけません。
クラスの中で、他のクラスのオブジェクトを保管したければ? そのオブジェクトを保持するプロパティを用意すればいいだけです。モデルもまったく同じです。
モデルクラスには、プロパティの値として「ReferenceProperty」というものが用意されています。これは、他のモデルの参照(reference)を保持するためのプロパティです。これを使って関連するモデルを保管するプロパティを用意すれば、簡単に「関連するモデルを保持する」ことができます。SQLのように、「JOINを使って……」などと難しく考える必要はまったくありません。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
※関連コンテンツ
「PythonによるGoogle App Engine(GAE)プログラミング入門」に戻る