4

也许这是错误的,但我总是在我的应用程序中使用这个查询:

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

NDB 这个查询的兼容版本是什么?元数据查询非常不同..

编辑: cid 是一个实体,而 cme_only 是一个我确定只有一个值的可迭代对象

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是一个表示键的伪属性。

其他海报是正确的,如果你只是一个给定完整密钥的单个实体,则使用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 回答