2012-09-02 30 views
5

Tôi đang sử dụng NDB trên GoogleAppEngine và tôi muốn truy xuất Khóa hoặc ID mẫu bằng cách chuyển e-mail vào truy vấn.Chiếu NDB của khóa Ví dụ hoặc ID

mẫu của tôi trông giống như sau:

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]) 

Khi chạy mã, tôi nhận được lỗi sau:

BadProjectionError: Projecting on unknown property __key__ 

Làm thế nào tôi có thể nhận được một ID dụ hoặc chính bằng cách truy vấn người dùng thông qua một e-mail trong NDB của AppEngine (ví dụ: quy trình đăng nhập)?

Cảm ơn!

+0

tôi có một cảm giác rằng _You're lẽ lưu trữ mật khẩu Incorrectly_ http://www.codinghorror.com/blog/2007/09/youre-probably-storing-passwords-incorrectly.html – Lipis

+0

Tại sao? Tôi không lưu trữ nó dưới dạng văn bản thuần túy ... –

Trả lời

13

Một truy vấn dự báo sẽ luôn bao gồm phím cũng như các lĩnh vực bạn chỉ định, vì vậy nếu keys_only là không đủ, sau đó:

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

Cảm ơn, đã không nhận ra điều đó! Công trinh! –

5

Nếu bạn chỉ cần chính bạn có thể thử các phím chỉ truy vấn:

Users.query(Users.user_email == email).get(keys_only=True) 
Các vấn đề liên quan