データストアによって割り当てられたIDを使用してキーでエンティティを読み込もうとしていますが、これを行うためのapiメソッドが表示されません(NDBを使用)。整数IDからキーを作成し、key.get()を使用してエンティティをロードできると思いましたが、IDだけからキーを作成する方法がわかりません。ここで明らかな何かが欠けているのではないかと思います。IDしかわからないエンティティをどのようにロードする必要がありますか?
4 に答える
別の方法:ndb.Key(YourModel, id).get()
。
YourModel.get_by_id()
IDでモデルインスタンスを取得します。
ここにドキュメントがあります:
https ://developers.google.com/appengine/docs/python/ndb/modelclass#Model_get_by_id
異なるモデルクラスのインスタンスは同じid/key_nameを持つことができるため、種類を知らずにIDでエンティティを取得できないとは思わないでください。
NDBのモデルは、モデルの一部としてキータイプを定義しません。これは、複数の異なる種類のキーと親を介してアクセスできる1つの特定のモデルタイプを持つことができるという点で便利です。これにより、それらがより柔軟になります。ただし、キーが何を表しているのか、どこから来ているのかが常に明確であるとは限らないため、多少問題があります。
したがって、特定のモデル(ほぼすべてのモデル)に1種類のキーしかない場合は、そのキーを生成するためのクラスメソッドを作成します。これにより、セマンティックが少し明確になります。
class Book(ndb.Model):
title = ndb.StringProperty()
pages = ndb.IntegerProperty()
@classmethod
def make_key(cls, isbn):
return ndb.Key(cls, isbn)
b = Book.make_key('1234-5678').get()
確かに、追加されたコードは厳密には必要ではありませんが、明確さが増し、モデルがより長期的に保守可能になります。
IDをキー文字列に解析できます。
key = ndb.Key(YourModel, id).urlsafe().
その後:
result = YourModel.query(YourModel.key== key).get().