2012-08-31 18 views
5

Qual è un buon modo per ottenere il numero di risultati della query quando si utilizza NDB su Google App Engine?Ottieni durata query NDB - utilizzando Python su Google App Engine

Tentativo questo:

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

Mi scuso che questa è probabilmente una domanda molto semplice, ma non era chiaro per me dal docs.

risposta

11

Sembra che tu voglia solo ottenere la prima entità dalla tua query. Questo è ciò che è query.get().

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

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

Dalla documentazione:

restituisce il primo risultato della query, se presente (altrimenti nessuno). È simile alla chiamata a q.fetch (1) e alla restituzione del primo elemento dell'elenco di risultati.

In una forma più generale, c'è query.fetch(n) dove n è il numero massimo di entità per recuperare. Restituisce una lista, quindi puoi facilmente controllare len() su quello.

+0

Grazie mille per la risposta, mi sono sentito stupido quando ho trovato la parte che riguarda l'utilizzo di "fetch()" nella documentazione poco dopo ho postato questa domanda Ma sono comunque felice di averlo chiesto perché avrebbe fatto "query.fetch (1) [0]" invece che molto meglio "query.get()" –

+1

@ChrisDutrow: Nessun problema! Quando usi 'q.fetch (n)', assicurati di controllare la lunghezza, perché fetch restituisce _up to_ 'n' entità, ma _can_ restituisce di meno. Il 'n' è solo un limite. – voithos

+0

@voithos ** Qual è un buon modo per ottenere il numero del risultato della query (solo il conteggio) quando si utilizza NDB? **. –

3

per ottenere il conteggio risultato di una query ndb si può semplicemente utilizzare count():

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