Classe di query NDB

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

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

Opzioni query

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

Le query supportano una serie di opzioni di configurazione. Queste vengono specificate tramite argomenti di parole chiave nei 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 questi due campi impostati. (vedi Query di proiezione).
compensazione int 0 Numero di risultati della query da saltare.
limite int Nessun limite Numero massimo di risultati della query da restituire.
batch_size int 20 Dimensione del batch.

Riguarda solo l'efficienza delle query. dimensioni batch più grandi richiedono più memoria, ma effettuano meno chiamate RPC.
prefetch_size int None Sostituisce la 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 di query).
end_cursor Cursor None Punto finale per la ricerca (vedi Cursori delle query).
scadenza int Dipende da Context Sostituisce la scadenza RPC (che per impostazione predefinita è di 5 secondi se non sostituita al momento della creazione di Context)
read_policy ndb.EVENTUAL_CONSISTENCY Il criterio di lettura. Imposta su 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 della parola 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 mantenere un insieme di opzioni di query in giro e usarle in vari luoghi. Anche se potresti semplicemente conservarli in un dizionario e passarlo ai metodi utilizzando **kwds, puoi anche creare un oggetto QueryOptions e passarlo utilizzando l'argomento della parola chiave options. I seguenti due esempi 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(). È però possibile chiamare anche ndb.Query().

Argomenti

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

Metodi di istanza

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

Argomenti

**q_options
Tutti gli argomenti delle parole chiave delle opzioni di query sono supportati.
ordine(order1, order2, ...)
Restituisce un nuovo Query con un ordine di ordinamento aggiuntivo o più. Prende uno o più argomenti che sono proprietà o "negati" proprietà. Ad esempio, per ordinare gli utenti in base all'età e a "disporre i legami" per nome, potresti usa un nome simile a qry.order(-Account.birthday, Account.name)
bind(...values...)
Questa funzione deve essere utilizzata con le query GQL che utilizzano parametri associazioni (:1, :2 ecc.) o associazioni denominate (:foo, :bar e così via). Vincola l'oggetto ai parametri.

Per associare i parametri, potresti chiamare qualcosa come qry.bind("USA", 49). Per associare parametri con nome, puoi chiamare in modo simile 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. Questo restituisce lo stesso risultato di len(q.fetch(limit)), ma in modo più efficiente.

Argomenti

limit
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)
Conteggia in modo asincrono il numero di risultati della query, fino a un limite; restituisce un Future il cui risultato è un numero. Questa è la versione asincrona di count().
fetch(limit, **q_options)
Recupero di un elenco di risultati di query, fino a un limite.

Argomenti

limit
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 delle query, fino a un limite definito. Restituisce un Future il cui risultato è un elenco di risultati. Questa è la versione asincrona di fetch().
fetch_page(dimensione_pagina, **q_options)
Recupera una "pagina" di risultati. Si tratta di un metodo specializzato per l'uso da parte di interfacce utente con paginazione.

Argomenti

page_size
Al massimo verranno restituiti questo numero di risultati.
**q_options
Sono supportati tutti gli argomenti delle parole chiave delle opzioni di query.
Restituisce una tupla (results, cursor, more):
  • results elenco dei risultati della query
  • cursor un cursor di query che rimanda al "batch successivo" di risultati. Se non vengono visualizzati altri risultati, è possibile che None.
  • more bool che indica se sono presenti (probabilmente) dopo questo batch. Se False, non ci sono altri risultati; se True, probabilmente ci sono altri risultati.

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

fetch_page_async(page_size, **q_options)
Recupero in modo asincrono di una "pagina" di risultati. Questa è la versione asincrona di fetch_page().
get_async(**q_options)
Restituisci in modo asincrono il primo risultato della query, se presente. (altrimenti None). Questa è la versione asincrona di get().
iter(**q_options)
Crea 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. In altre parole, applica la funzione (o il tasklet) a ogni entità nei risultati della query.

Argomenti

richiamata
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 sotto.
**q_options
Tutti gli argomenti delle parole chiave delle opzioni di query sono supportati.

Firma del callback Il callback viene chiamato in genere con un'entità come argomento. Tuttavia, se viene fornito keys_only=True, viene chiamato con una chiave. Se viene specificato pass_batch_into_callback=True, il callback è chiamata con tre argomenti: il batch corrente, l'indice all'interno il batch e l'entità o Key in quell'indice. Il callback può restituire ciò che vuole. Se il callback è None, significa che si presume che restituisca solo l'entità o la chiave passata.

Facoltativo merge_future Il merge_future è un argomento avanzato che può essere utilizzata per eseguire l'override della combinazione dei risultati del callback nel valore restituito complessivo di map(). Per impostazione predefinita, viene prodotto un elenco di valori di ritorno del callback. Sostituendo uno di un piccolo numero di alternative specializzate, puoi organizzare diversamente. Vedi il codice sorgente per tasklets.MultiFuture per il valore predefinito implementazione e una descrizione il protocollo merge_future da implementare. Le alternative dello stesso modulo includono QueueFuture, SerialQueueFuture e ReducingFuture.

Restituisce un elenco dei risultati di tutti i richiami. (vedi "merge_future facoltativo" sopra). Restituisce un valore quando la query è stata completata 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().