9

データストアによって割り当てられたIDを使用してキーでエンティティを読み込もうとしていますが、これを行うためのapiメソッドが表示されません(NDBを使用)。整数IDからキーを作成し、key.get()を使用してエンティティをロードできると思いましたが、IDだけからキーを作成する方法がわかりません。ここで明らかな何かが欠けているのではないかと思います。IDしかわからないエンティティをどのようにロードする必要がありますか?

4

4 に答える 4

29

別の方法:ndb.Key(YourModel, id).get()

于 2012-04-06T05:12:54.760 に答える
28

YourModel.get_by_id()IDでモデルインスタンスを取得します。

ここにドキュメントがあります:
https ://developers.google.com/appengine/docs/python/ndb/modelclass#Model_get_by_id

異なるモデルクラスのインスタンスは同じid/key_nameを持つことができるため、種類を知らずにIDでエンティティを取得できないとは思わないでください。

于 2012-04-05T13:13:09.603 に答える
2

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()

確かに、追加されたコードは厳密には必要ではありませんが、明確さが増し、モデルがより長期的に保守可能になります。

于 2015-05-28T19:51:29.843 に答える
0

IDをキー文字列に解析できます。

key = ndb.Key(YourModel, id).urlsafe().

その後:

result = YourModel.query(YourModel.key== key).get().
于 2019-04-26T06:10:33.413 に答える