Classe di query NDB

Un oggetto Query rappresenta una query NDB, una richiesta di un elenco filtrato e ordinato di entità.

Questa pagina contiene la documentazione di riferimento. Per una discussione generale sulle query NDB, vedi Query.

Opzioni query

Molti metodi di query accettano un insieme standard di opzioni aggiuntive, sotto forma di argomenti di parole chiave come keys_only=True o come oggetto QueryOptions passato con options=QueryOptions(...).

Le query supportano una serie di opzioni di configurazione. Questi vengono specificati dagli argomenti delle parole chiave per i metodi Query:

Argomento Tipo Predefinito Descrizione
keys_only bool False Tutte le operazioni restituiscono chiavi anziché entità.
proiezione tupla (o elenco) di proprietà (o stringhe) None Le operazioni restituiscono entità con solo le proprietà specificate impostate. projection=[Article.title, Article.date] o projection=['title', 'date'] recupera le entità con solo questi due campi impostati. Consulta la sezione Query di proiezione.
offset int 0 Numero di risultati della query da ignorare.
limite int Nessun limite Il numero massimo di risultati della query da restituire.
batch_size int 20 Dimensione batch.

Influisce solo sull'efficienza delle query; batch di dimensioni maggiori utilizzano più memoria, ma effettuano meno chiamate RPC.
prefetch_size int None Esegue l'override della dimensione del batch per il primo batch restituito.
produce_cursors bool False Genera cursori dalla query (vedi Iteratori di query). Cursori di query).
start_cursor Cursor None Punto di partenza per la ricerca (vedi Cursori delle query).
end_cursor Cursor None Punto finale per la ricerca (vedi Cursori di query).
scadenza int Dipende da Context Esegue l'override del termine RPC (il cui valore predefinito è 5 secondi se non viene eseguito l'override quando viene creato Context)
read_policy ndb.EVENTUAL_CONSISTENCY La norma di lettura. Imposta ndb.EVENTUAL_CONSISTENCY per ottenere risultati forse più rapidi senza attendere che Datastore applichi le modifiche in attesa a tutti i record restituiti.

Per eseguire una query con un insieme specifico di opzioni, trasmetti gli argomenti delle parole chiave al metodo applicabile:

qry = Employee.query().filter(...).order(...) # Create a query
for acct in qry.fetch(10, offset=20): # Skip the first 20
  print acct

A volte, potresti voler conservare un insieme di opzioni di query e utilizzarle in vari punti. Anche se potresti semplicemente mantenerli in un dizionario e passare questo dizionario ai metodi utilizzando **kwds, puoi anche creare un oggetto QueryOptions e passarlo utilizzando l'argomento della parola chiave options. I due esempi seguenti sono equivalenti:

qo = ndb.QueryOptions(keys_only=True, offset=20)
results = qry.fetch(10, options=qo)
results = qry.fetch(10, keys_only=True, offset=20)

Costruttore

In genere, un'applicazione crea un Query chiamando Model.query(). Ma è anche possibile chiamare ndb.Query().

Argomenti

kind
Stringa di tipo facoltativa. In genere, il nome di una classe di entità.
ancestor
Chiave antenato facoltativa.
filtri
Nodo facoltativo che rappresenta un albero di espressioni di filtro.
ordini
Oggetto datastore_query.Order facoltativo.
app
ID app facoltativo.
namespace
Spazio dei nomi facoltativo. Se non specificato, verrà utilizzato lo spazio dei nomi predefinito al momento dell'esecuzione della query.
proiezione
Elenco o tupla facoltativi di proprietà da proiettare.
group_by
Elenco o tupla facoltativi di proprietà in base alle quali raggruppare.
default_options
Oggetto QueryOptions facoltativo che fornisce le opzioni di query predefinite da utilizzare quando la query viene eseguita.

Metodi dell'istanza

filtro(filter1, filter2, ...)
Restituisce un nuovo Query con filtri aggiuntivi applicati. Accetta gli argomenti del filtro come descritto in Query. qry.filter(filter1).filter(filter2) è equivalente a qry.filter(filter1filter2)
get(**q_options)
Restituisce il primo risultato della query, se presente (altrimenti None). È simile alla chiamata di q.fetch(1) e alla restituzione del primo elemento dell'elenco dei risultati.

Argomenti

**q_options
Sono supportati tutti gli argomenti delle parole chiave delle opzioni di query.
order(order1, order2, ...)
Restituisce un nuovo Query con uno o più criteri di ordinamento aggiuntivi applicati. Accetta uno o più argomenti che sono proprietà o proprietà "negate". Ad esempio, per ordinare gli utenti per età e "risolvere i pareggi" per nome, potresti utilizzare un'espressione simile a qry.order(-Account.birthday, Account.name)
bind(...values...)
Questa funzione è da utilizzare con le query GQL che utilizzano associazioni di parametri (:1, :2 e così via) o associazioni denominate (:foo, :bar e così via). Associa i valori passati ai parametri.

Per associare i parametri, puoi chiamare un comando simile a qry.bind("USA", 49). Per associare parametri denominati, puoi chiamare un'operazione simile a qry.bind(region = "USA", threshold = 49).

Restituisce un nuovo oggetto Query con i valori dei parametri associati.

count(limit=None, **q_options)
Restituisce il numero di risultati della query, fino a un limite. Restituisce lo stesso risultato di len(q.fetch(limit)), ma in modo più efficiente.

Argomenti

limite
Numero massimo di risultati da conteggiare
**q_options
Sono supportati tutti gli argomenti delle parole chiave delle opzioni di query e le opzioni di contesto.
count_async(limit, **q_options)
Conta in modo asincrono il numero di risultati della query, fino a un limite; restituisce un Future il cui risultato è un numero. Si tratta della versione asincrona di count().
fetch(limit, **q_options)
Recupera un elenco di risultati delle query, fino a un limite.

Argomenti

limite
Numero massimo di risultati da conteggiare
**q_options
Sono supportati tutti gli argomenti delle parole chiave delle opzioni di query.
fetch_async(limit, **q_options)
Recupera in modo asincrono un elenco di risultati di query, fino a un limite. Restituisce un Future il cui risultato è un elenco di risultati. Questa è la versione asincrona di fetch().
fetch_page(page_size, **q_options)
Recupera una "pagina" di risultati. Si tratta di un metodo specializzato per l'utilizzo da parte delle interfacce utente di paginazione.

Argomenti

page_size
Verrà restituito al massimo questo numero di risultati.
**q_options
Sono supportati tutti gli argomenti delle parole chiave delle opzioni di query.
Restituisce una tupla (results, cursor, more):
  • Elenco dei risultati delle query results
  • cursor un cursore di query che punta al batch "successivo" di risultati. Se non ci sono altri risultati, potrebbe essere None.
  • more bool che indica se ci sono (probabilmente) altri risultati dopo questo batch. Se False, non ci sono altri risultati; se True, probabilmente ci sono altri risultati.

Per recuperare la pagina successiva, trasmetti il cursore restituito da una chiamata alla chiamata successiva utilizzando start_cursor=cursor. Un idioma comune è passare il cursore al client utilizzando cursor.urlsafe() e ricostruirlo in una richiesta successiva utilizzando Cursor(urlsafe=string).

fetch_page_async(page_size, **q_options)
Recupera in modo asincrono una "pagina" di risultati. Questa è la versione asincrona di fetch_page().
get_async(**q_options)
Restituisce in modo asincrono il primo risultato della query, se presente (altrimenti None). Si tratta della versione asincrona di get().
iter(**q_options)
Costruisce e restituisce un iteratore sulla query.

Argomenti

**q_options
Sono supportati tutti gli argomenti delle parole chiave delle opzioni di query.

Restituisce un oggetto QueryIterator.

map(callback, pass_batch_into_callback=None, merge_future=None, **q_options)
Mappa una funzione di callback o un tasklet sui risultati della query. ovvero applica la funzione (o il tasklet) a ogni entità nei risultati della query.

Argomenti

callback
Una funzione o un tasklet da applicare a ogni risultato.
pass_batch_into_callback
Se True, chiama il callback con gli argomenti delle informazioni sul batch come descritto di seguito.
merge_future
Sottoclasse Future facoltativa; vedi di seguito.
**q_options
Sono supportati tutti gli argomenti delle parole chiave delle opzioni di query.

Firma del callback Il callback viene normalmente chiamato con un'entità come argomento. Tuttavia, se viene fornito keys_only=True, viene chiamato con una chiave. Se viene fornito pass_batch_into_callback=True, il callback viene chiamato con tre argomenti: il batch corrente, l'indice all'interno del batch e l'entità o Key in corrispondenza di quell'indice. Il callback può restituire ciò che vuole. Se il callback è None, viene presupposto un callback banale che restituisce solo l'entità o la chiave passata.

Facoltativo merge_future merge_future è un argomento avanzato che può essere utilizzato per sostituire il modo in cui i risultati del callback vengono combinati nel valore restituito complessivo di map(). Per impostazione predefinita, viene generato un elenco di valori restituiti del callback. Sostituendo una delle poche alternative specializzate, puoi organizzare altrimenti. Consulta il codice sorgente di tasklets.MultiFuture per l'implementazione predefinita e una descrizione del protocollo che l'oggetto merge_future deve implementare. Le alternative dello stesso modulo includono QueueFuture, SerialQueueFuture e ReducingFuture.

Restituisce un elenco dei risultati di tutti i callback. (ma vedi "facoltativo merge_future" sopra). Viene restituito quando la query è stata eseguita fino al completamento e tutti i callback sono stati restituiti.

map_async(callback, pass_batch_into_callback=None, merge_future=None, **q_options)
Mappa in modo asincrono una funzione di callback o un tasklet sui risultati della query. Questa è la versione asincrona di map().