15

これは単純に見えますが、GoogleAppEngineのndbからエンティティのIDを取得する方法が見つかりませんでした。

class Message(ndb.Model):
    name: ndb.StringProperty()
    ...

メッセージオブジェクトを作成します。

message = Message(id=someId)
message.name = someName
message.put()

後でエンティティを取得するとき:

message = Message.query(Message.name==someName).fetch(1)

メッセージのIDを取得するにはどうすればよいですか?ありがとう。

4

2 に答える 2

38

キーがあれば、いくつかの方法でIDを取得できます。

fetchまたはのget

message = Message.query(Message.name==someName).fetch(1)[0]
message_id = message.key.id()

message = Message.query(Message.name==someName).get()
message_id = message.key.id()

エンティティは必要なく、IDのみが必要な場合は、キーのみを取得することでリソースを節約できます。

message_key = Message.query(Message.name==someName).fetch(1, keys_only=True)[0]
message_id = message_key.id()

message_key = Message.query(Message.name==someName).get(keys_only=True)
message_id = message_key.id()

プット後にもキーを取得できることに注意してください。

message_key = message.put()
message_id = message_key.id()

キークラスNDBから

于 2013-01-22T12:58:49.843 に答える
1

単一のインスタンスに対して get() を使用してみてください

message = Message.query(Message.name==someName).get()
message.key.id()

fetch() はリスト オブジェクトを返すため、コードはおおよそ次のようにする必要があります。

messages = Message.query(Message.name==someName).fetch(1)
message = messages[0]
message.key.id()
于 2014-02-07T00:01:17.983 に答える