2

ドキュメント https://developers.google.com/appengine/docs/python/ndb/keyclass#Key_integer_idが表示されます

最後の(kind、id)ペアの整数IDを返します。キーに文字列IDがあるか、不完全な場合はNoneを返します。

キーのIDはintになる可能性があると思います。だから私は書く

    r = ndb.Key(UserSession, int(id)).get()
    if r:
        return r.session

ただし、dev_server.pyは常に発生します

  File "/home/bitcoin/down/google_appengine/google/appengine/datastore/datastore_stub_util.py", line 346, in CheckReference
    raise datastore_errors.BadRequestError('missing key id/name')
BadRequestError: missing key id/name

int(id)-> str(id)を変更します

正しいようです;

だから私の質問は、integer_idでndbキーを使用する方法ですか?

モデルは

class UserSession(ndb.Model):
    session = ndb.BlobProperty()
4

5 に答える 5

10

エンティティを読み取るときに使用する ID のタイプはエンティティを書き込むときに使用した ID のタイプと一致する必要があります。通常、ID やキーを指定せずに新しいエンティティを作成すると、整数 ID が自動的に割り当てられます。次に、entity.put() によって返されたキーから ID を取得します。通常、独自の整数 ID を割り当てることはお勧めしません。アプリがキーを割り当てるときは、文字列でなければならないという規則があります。

于 2013-03-04T15:46:48.980 に答える
1

取得する簡単な方法があります。

UserSession.get_by_id(int(id))

https://developers.google.com/appengine/docs/python/ndb/modelclass#Model_get_by_id

idそれでもうまくいかない場合は、それが間違っているか空であると思われます。

于 2013-03-04T02:57:40.397 に答える
0

'id' も Python の組み込み関数です。たぶん、あなたはそれを間違って取っています。

于 2014-01-24T14:55:12.843 に答える
0

変数「id」に何か問題があるはずです。

ここでのコードは問題ありません。int ではなく long を使用することをお勧めします。

特定の整数 ID を使用して、開発サーバーの対話型コンソールでコードを試すことができます。

于 2013-03-04T11:44:01.693 に答える
0

ID ではなくキーを使用して、セッション内のエンティティを識別する方が簡単な場合があります。セッションを識別するためにキーから ID を抽出する必要は実際にはありません (メモリを少し節約する以外は。あなたの考え方は RDB に基づいていると思います。キーを使用すると、実際にエンティティ/セッションの識別が行われることがわかりました。より簡単に。

于 2013-03-04T13:02:49.623 に答える