2012-06-19 31 views
4

也許是錯的,但我總是用這個查詢我的應用程序:此查詢的NDB兼容版本是什麼?

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 }} 

我不喜歡它,但它足以

回答

3

如果cid是你的實體,那麼你可以這樣做:

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

但是,這將返回基本上是你開始時,cid相同的實體,但總的來說這是關鍵查詢的一種方式。

您可以在文檔中查看有關如何construct keys的更多信息。

+0

什麼是'cid'?如果它的ndb模型比它應該是'cid.key' ...而不調用它。 – aschmid00

+0

@ aschmid00這就是我asume ..讓我們等待從OP,我會相應地改變它。 – Lipis

+0

cid是一個實體'cid = Comput.get_by_id(int(self.request.get('id')))' –

7

不需要元數據查詢。該NDB方式拼寫上__key__查詢如下:

ModelClass.query(ModelClass._key == key_value) 

也就是說,就像查詢性能FOO是通過對ModelClass.foo == value過濾完成,ModelClass._key是代表該鍵的僞屬性。

其他的海報是正確的,如果你只有一個單一的實體給出了它的全部密鑰,在密鑰對象上使用get()方法更好(更快,更便宜)。此外,如果e是實體(模型實例),在NDB中,密鑰不是e.key(),而是e.key(或e._key - 是的,這與我在上面提到的_key屬性相同,它用作類屬性和實例屬性)。

事實上,如果你有一個urlsafe鍵(例如'agFfcg4LEghFbXBsb3llZRgDDA'),將它變成一個Key對象的方式是ndb.Key(urlsafe='agFfcg4LEghFbXBsb3llZRgDDA')

祝你好運!

+0

感謝Guido,我會盡力完成向ndb的過渡。 –

相關問題