也许这是错的,但我总是将此查询用于我的应用:
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 }}
我不喜欢它,但它已经足够了
答案 0 :(得分:7)
不需要元数据查询。在__key__
拼写查询的NDB方式如下:
ModelClass.query(ModelClass._key == key_value)
也就是说,就像通过对ModelClass.foo == value
进行过滤来查询属性foo一样,ModelClass._key
是表示密钥的伪属性。
其他海报是正确的,如果您只有一个实体给定其全密钥,则使用Key对象上的get()
方法会更好(更快,更便宜)。此外,如果e是实体(模型实例),则在NDB中,密钥不是e.key()
而是e.key
(或e._key
- 是的,这是相同的_key属性我在上面提到过,它作为一个类属性和一个实例属性工作。)
事实上,如果您有一个urlsafe密钥(例如'agFfcg4LEghFbXBsb3llZRgDDA'
),则将其转换为密钥对象的方式为ndb.Key(urlsafe='agFfcg4LEghFbXBsb3llZRgDDA')
。
答案 1 :(得分:3)
如果cid
是您的实体,那么您可以这样做:
from google.appengine.ext import ndb
cme_only = ndb.Key(Comput, cid.key.id()).get()
但是这将基本上返回与你开始的同一个实体cid
,但通常这是按键查询的一种方式。
您可以详细了解如何在文档中construct keys。