4

間違っているかもしれませんが、私は常にアプリに次のクエリを使用しています。

cme_only = Comput.all().filter('__key__ =', cid.key())

この NDB のクエリの互換バージョンは何ですか? メタデータ クエリは大きく異なります。

edit : cid はエンティティであり、cme_only は iterable であり、値が 1 つしかないと確信しています

cid = Comput.get_by_id(int(self.request.get('id')))
cme_only = Comput.all().filter('__key__ =', cid.key())

そしてテンプレートで:

{{ for Comput in cme_only }}

私はそれが好きではありませんでしたが、それで十分でした

4

2 に答える 2

7

メタデータ クエリは必要ありません。クエリを綴る NDB の方法__key__は次のとおりです。

ModelClass.query(ModelClass._key == key_value)

つまり、プロパティ foo のクエリが でフィルタリングすることによって行われるのと同じようにModelClass.foo == valueModelClass._keyはキーを表す疑似プロパティです。

他のポスターは、完全なキーが与えられた単一のエンティティを 1 つだけ使用するget()場合、Key オブジェクトでメソッドを使用する方が優れている (高速で安価) ことは正しいです。また、e がエンティティ (モデル インスタンス) の場合、NDB では、キーはe.key()butではありませんe.key(またはe._key-- そうです、これは上記で述べたのと同じ _key 属性であり、クラス属性およびインスタンス属性として機能します)。

実際、urlsafe キー (例: 'agFfcg4LEghFbXBsb3llZRgDDA') を持っている場合、それを Key オブジェクトに変換する方法はndb.Key(urlsafe='agFfcg4LEghFbXBsb3llZRgDDA')です。

幸運を!

于 2012-06-19T15:36:25.100 に答える
3

cidがあなたのエンティティである場合、それを行うことができます:

from google.appengine.ext import ndb
cme_only = ndb.Key(Comput, cid.key.id()).get()

しかし、これは基本的に、開始したエンティティと同じものを返しますcid

ドキュメントでキーを構築する方法の詳細を確認できます。

于 2012-06-19T12:25:09.140 に答える