gae/pのgqlの書き方

問題

データストアへクエリを発行したい

方法

タイトル降順、10件まで
必ず SELECT * FROM で始める

SELECT * FROM WikiWords ORDER BY title DESC LIMIT 10

pythonから

from google.appengine.ext import db

q = db.GqlQuery("SELECT * FROM WikiWords")
results = q.fetch(20)
for x in results:
  print x.title

文字列の前方一致検索。

search_key = u"東京"
q = db.GqlQuery("SELECT * FROM WikiWords WHERE title >= :1 and title < :2 ", search_key, search_key + u"\uFFFD")

results = q.fetch(10)
for x in results:
  print x.title.encode('utf-8')

Unicode特殊文字としてU+FFFD (REPLACEMENT CHARACTER) を使う。

部分一致検索はgqlではできない。
全て検索してからpythonのプログラムとして処理する。
reを使う場合の例。

from google.appengine.ext import db
from wiki.models import WikiWords
import re

q = db.GqlQuery("SELECT * FROM WikiWords")
results = q.fetch(100)
for x in results:
  if re.search(u"東京大学", x.body):
    print x.title.encode('utf-8')