Google App Engine であそんでみよう. (6)
GQL
Datastore へのアクセスには, 通常Queryオブジェクトを使うのだが, RDB用のSQLになれきってしまった人のために, SQLに一見似た問い合わせ言語が用意されている. それがGQL. こんな感じで使える.
q = GqlQuery("SELECT * FROM Memo WHERE author = :1", user) for memo in q: ...
「:1」は, 一つ目の引数と置換する, という意味. キーワードを用いて
q = GqlQuery("SELECT * FROM Memo WHERE author = :author", author=user)
と書くこともできる.
これは
q = db.Query(Memo).filter("author =", user)
と書くのと同じ.
GQLで書くと一見SQLとそっくりになるが, 実は全然違う.
- SELECT の後に本来はプロパティが書けるはずなのだが, GQL では * しか書けない! 全然 SELECT して無いじゃん!
- WHERE の後の条件式に AND条件は書けるが OR 条件は書けない
- 条件式に SQL の IN, BETWEEN, LIKE などの演算子は使えない
- っていうか, そもそもSELECTしかない
要するに, GQLで書いてもQueryオブジェクトを作っても表現力は同じだということだ. 当たり前だが.
それならGQLのような中途半端なものは使わずに, Queryオブジェクトを使った方がなんぼかいいような気がするが...