2012-09-02 129 views
5

我在GoogleAppEngine上使用NDB,我想通過將電子郵件傳遞到查詢中來檢索實例密鑰或ID。NDB投影實例密鑰或ID

我的模型看起來是這樣的:

class Users(ndb.Model): 
    user_name = ndb.StringProperty(required=True) 
    user_email = ndb.StringProperty(required=True) 
    user_password = ndb.StringProperty(required=True) 

    @classmethod 
    def get_password_by_email(cls, email): 
     return Users.query(Users.user_email == email).get(projection=[Users.key, Users.user_password]) 

運行代碼時,我收到以下錯誤:

BadProjectionError: Projecting on unknown property __key__ 

我怎樣才能通過一個查詢用戶獲得一個實例ID或Key在AppEngine的NDB中發送電子郵件(例如登錄過程)?

謝謝!

+0

我有一種感覺,_You're可能儲存密碼Incorrectly_ http://www.codinghorror.com/blog/2007/09/youre-probably-storing-passwords-incorrectly.html – Lipis

+0

爲什麼?我不會將它存儲爲純文本... –

回答

13

投影查詢將始終包括密鑰以及您指定的領域,所以如果keys_only是不夠的,那麼:

return Users.query(Users.user_email == email).get(projection=[Users.password]) 
+0

謝謝,沒有意識到!作品! –

5

如果您只需要按鍵,你可以嘗試純鍵查詢:

Users.query(Users.user_email == email).get(keys_only=True)