例えばサイトの情報を格納しておきたかったとすると、以下の流れのはず。
■1:Model を定義
db.Model を継承した Site というクラスを定義する。
インスタンス変数にはおまじない的に Property のサブクラスを入れておく。
from google.appengine.ext import db
class Site(db.Model):
name = db.StringProperty(required=True)
url = db.StringProperty(required=True)
■2:データの追加
追加の場合は、以下のように new した後に put() するだけ。
site = Site(name="hogehoge.com",url="http://hogehoge.com")
site.put()
データをユニークにしたい場合は、get_or_insert() を使うとよさげ。
※ 第1引数がキーとなって、データが存在すれば取得、なければ追加して取得
site = Site.get_or_insert(key,name="hogehoge.com",url="http://hogehoge.com")
■3:データの取得
取得したい Site のキーを知っているなら、以下で取得できる。
site = Site.get(key)
以下は name でソートして、すべて取得の場合。
sites = Site.all()
sites.order("name")
昇順でソートする場合はプロパティ名に - をつけます。
sites = Site.all()
sites.order("-name")
条件を指定する場合は、filter() を使う。
sites = Site.all()
sites.filter("name = ", name)
■3:更新
get() や get_or_insert() や all() で取得し、プロパティを変更し、put() を呼ぶだけ。
sites = Site.get(key)
site.name = "new hogehoge.com"
site.put()
最後に、追加や更新の時に Transaction とか気をつけたい場合は、
以下にちゃんとしたやり方があります。
http://code.google.com/intl/en/appengine/docs/python/datastore/transactions.html
SQL を書かなくていいし、データの操作をオブジェクトの操作として実装できるので楽ですね。
No comments :
Post a Comment