2012-09-02 11 views
5

Estoy usando NDB en GoogleAppEngine y quiero recuperar una clave o ID de instancia enviando un correo electrónico a la consulta.Proyección NDB de clave de instancia o ID

Mi modelo es como la siguiente:

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

Cuando se ejecuta el código, me sale el siguiente error:

BadProjectionError: Projecting on unknown property __key__ 

¿Cómo puedo obtener un ID de instancia o clave mediante la consulta de los usuarios a través de una correo electrónico en el NDB de AppEngine (por ejemplo, proceso de inicio de sesión)?

Gracias!

+0

tengo la sensación de que _You're Probablemente Almacenar contraseñas Incorrectly_ http://www.codinghorror.com/blog/2007/09/youre-probably-storing-passwords-incorrectly.html – Lipis

+0

¿Por qué? No lo estoy almacenando como texto sin formato ... –

Respuesta

13

Una consulta de proyección incluirá siempre la clave, así como los campos especificados, por lo que si keys_only no es suficiente, entonces:

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

¡Gracias, no me di cuenta de eso! ¡Trabajos! –

5

Si sólo necesita clave puede probar llaves de sólo consulta:

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