2014-12-26 20 views
1

我想完成ndb.get_multi()Query()之間的某種混合解決方案。給定鍵的查詢

我有一組按鍵,那我可以使用:

entities = ndb.get_multi(keys) 

我想查詢,過濾器,並責令使用查詢()不是在做所有自己一些更有效的方式將這些實體或手動的Python代碼。

人們如何去做這件事?我想是這樣的:

query = Entity.gql('WHERE __key__ in :1 AND prop1 = :2 ORDER BY prop2', keys, 'hello') 
entities = query.fetch() 

編輯:

上面的代碼工作得很好,但它似乎是取()從未使用值從緩存中,而ndb.get_multi()一樣。我對此有糾正嗎?如果不是,那麼gql +獲取方法比get_multi +手動處理差得多?

+1

我可以。根據我的理解,當我執行ndb.get_multi()時,它使用緩存中的值(如果可用)(但我更喜歡),但是當我使用查詢訪存()時,它不使用使用緩存。或者我錯過了什麼? – webo

回答

1

除非您自己寫,否則無法在已獲取的屬性上使用查詢,但可以使用內置的python過濾器輕鬆完成所有這些操作。請注意,如果您有一個大數據集,而不是get_multi數百個鍵只能獲得5個實體,那麼它運行查詢會更高效。

entities = ndb.get_multi(keys) 
# filtering 
entities = [e for e in entities if e.prop1 == 'bla' and e.prop2 > 3] 
#sorting by multiple properties 
entities = sorted(entities, key=lambda x: (x.prop1, x.prop2)) 

UPDATE:是的,高速緩存,當您通過鑰匙收到您的實體時才使用,它是當你查詢實體使用