主にプログラミングに関して。Python, .NET Framework(C#), JavaScript, その他いくらか。
記事にあるサンプルやコードは要検証。使用に際しては責任を負いかねます

スポンサーサイト

                
tags:
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Python, GoogleAppEngine: dbからndbへの移行

                
 GoogleAppEngineでDatastoreにアクセスするためのモジュールは、古いものでdb、新しいものでndbというものが用意されている。自作のイメージアップローダのdbからndbへの移行をしてみた。割と楽に済んだが必要になった書き換えをメモとして残しておく。
http://picrect.appspot.com/rects/20061226

・"db"を"ndb"に
#from google.appengine.ext import db
from google.appengine.ext import ndb

#Foo(db.Model):
#  foo = db.StringProperty()
Foo(ndb.Model):
  foo = ndb.StringProperty()


・dbでのListProperyはなくなった
#Foo(db.Model):
#  foo = db.ListProperty()
Foo(ndb.Model):
  foo = ndb.StringProperty(repeated=True)
  datetime = ndb.DateTimeProperty()

リストを保存したいときは、型を指定して、repeatをTrueにする

・モデルを定義したクラスからqueryメソッドを実行する
#q = db.Query(Foo)
q = Foo.query()


・フィルタやオーダーが文字列からオブジェクトを使った式になった
#q.filter("foo =", "moziretsu").order("datetime").get()
q.filter(Foo.foo == "moziretsu").order(Foo.datetime).get()


ndbのModelではkey_nameプロパティがなくなり、idに統合された。dbではidがint型しか受け付けなかったから、文字列をキーにしたければkey_nameにそのキーを値として与えておく必要があった。これがidに統合され、キーの値をidに渡してデータストアに保存するとき、int型がキーの値だったらID、str型がキーの値だったらKey Nameに自動で値が設定されるようになった。
#foo = Foo(key_name="foo1")
foo = Foo(id="foo1")


上記の変更にともなって、Modelのget_by_key_nameメソッドがなくなり、これもget_by_idメソッドに統合された。
#Book.get_by_key_name("foo")
Book.get_by_id("foo")


エンティティからkey_nameを知りたいときは、keyがメソッドではなくなったので以下のように。
book.key.id()
            

コメントの投稿

非公開コメント

プロフィール

hMatoba

Author:hMatoba
Github

最新記事
リンク
作ったものなど
月別アーカイブ
カテゴリ
タグリスト

検索フォーム
Amazon
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。