GAE/PyでLow Lovel API - エンティティの生成と保存と読み込み
Low Level APIでエンティティを生成したりデータストアに保存したりデータストアから読み込んだりする。
エンティティの生成
Entityクラスのコンストラクタにカインド名とIDまたはnameを渡すとエンティティを生成することができる。
from google.appengine.api.datastore import Entity entity = Entity('mykind', id=1) # カインド名とIDを渡して生成 entity = Entity('mykind', name='myentity') # カインド名とnameを渡して生成
エンティティクラスはdictを継承しているので、dictオブジェクトと同様にキーと値のペアをデータとしてセットすることができる。セットしたキーと値のペアはデータストアに保存される。
from google.appengine.api.datastore import Entity entity = Entity('mykind', id=1) entity['firstname'] = 'Ishida' entity['lastname'] = 'Makoto'
dictなのでupdate()関数とかkeys() value() items()といった関数を使うことができる。
from google.appengine.api.datastore import Entity entity = Entity('mykind', id=1) entity.update({ 'firstname': 'Ishida', 'lastname': 'Makoto', }) entity.keys() # ['firstname', 'lastname'] entity.values() # ['Ishida', 'Makoto'] entity.items() # [('firstname', 'Ishida'), ('lastname', 'Makoto')]
データストアにエンティティを保存する
datastoreモジュールのPut関数でデータストアにエンティティを保存する。
from google.appengine.api import datastore from google.appengine.api.datastore import Entity entity = Entity('mykind', id=1) entity.update({ 'firstname': 'Ishida', 'lastname': 'Makoto', }) datastore.Put(entity) # データストアにエンティティを保存する
エンティティのリストを渡して、複数のエンティティを一気に保存することもできる。
from google.appengine.api import datastore from google.appengine.api.datastore import Entity entity1 = Entity('mykind', id=1) entity2 = Entity('mykind', id=2) entity3 = Entity('mykind', id=3) datastore.Put([entity1, entity2, entity3]) # 複数のエンティティを一度に保存する
Put()関数は戻り値として保存したエンティティのキーを返す。複数エンティティを一度に保存した時はキーのリストを返す。このキーを使ってデータストアからエンティティを読み込むことができる。
データストアからエンティティを読み込む
datastoreモジュールのGet()関数にエンティティのキーを表すKeyオブジェクトを渡すことで、データストアからエンティティを読み込むことができる。指定したキーを持つエンティティがデータストアにない場合、EntityNotFoundErrorが投げられる。
from google.appengine.api import datastore from google.appengine.api.datastore_types import Key key = Key.from_path('mykind', 1) entity = datastore.Get(key) # データストアからエンティティを読み込む
Get()関数も複数のキーを同時に指定して複数のエンティティを読み込むことができる。
from google.appengine.api import datastore from google.appengine.api.datastore_types import Key key1 = Key.from_path('mykind', 1) key2 = Key.from_path('mykind', 2) key3 = Key.from_path('mykind', 3) [entity1, entity2, entity3] = datastore.Get([key1, key2, key3]) # データストアから複数のエンティティを読み込む