2012-08-31 17 views
5

¿Cuál es una buena forma de obtener el resultado de la consulta cuando se usa NDB en el motor de la aplicación google?Obtener longitud de consulta NDB - utilizando Python en Google App Engine

Intento de esto:

query = NDB_Model.query(NDB_Model.some_property == some_value) 
if len(query) > 0: # <-- this throws and exception 
    entity = query[0] 

Me disculpo que esto es probablemente una pregunta muy simple, pero no estaba claro para mí desde el docs.

Respuesta

11

Parece que solo quiere obtener la primera entidad de su consulta. Eso es lo que query.get() es para.

query = NDB_Model.query(NDB_Model.some_property == some_value) 

entity = query.get() 
if entity is not None: 
    # Do stuff 

A partir de los documentos:

devuelve el primer resultado de la consulta, en su caso (por lo demás ninguno). Esto es similar a llamar a q.fetch (1) y devolver el primer elemento de la lista de resultados.

En una forma más general, hay query.fetch(n) donde n es el número máximo de entidades para FETCH. Devuelve una lista, por lo que podría verificar fácilmente len() en eso.

+0

Muchas gracias por su respuesta, me sentí estúpida cuando me encontré con la parte sobre el uso de "fetch()" en la documentación poco después de haber publicado esta pregunta. Pero todavía estoy contento de haber preguntado porque habría hecho "query.fetch (1) [0]" en lugar de la mucho mejor "query.get()" –

+1

@ChrisDutrow: ¡No hay problema! Cuando use 'q.fetch (n)', asegúrese de verificar la longitud, porque fetch devuelve _up to_ 'n' entidades, pero _can_ return menos. La 'n' es solo un límite. – voithos

+0

@voithos ** ¿Cuál es una buena forma de obtener el resultado de la consulta (solo el recuento) cuando se usa NDB? **. –

3

para obtener el recuento resultado de una consulta NDB puede simplemente usar count():

query = NDB_Model.query(NDB_Model.some_property == some_value) 
if query.count() > 0: 
    entity = query[0]