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]) # データストアから複数のエンティティを読み込む