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.Orderfacoltativo. - 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
QueryOptionsfacoltativo che fornisce le opzioni di query predefinite da utilizzare quando la query viene eseguita.
Metodi dell'istanza
- filtro(filter1, filter2, ...)
- Restituisce un nuovo
Querycon filtri aggiuntivi applicati. Accetta gli argomenti del filtro come descritto in Query.qry.filter(filter1).filter(filter2)è equivalente aqry.filter(filter1, filter2) - get(**q_options)
- Restituisce il primo risultato della query, se presente (altrimenti
None). È simile alla chiamata diq.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
Querycon 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 aqry.order(-Account.birthday, Account.name) - bind(...values...)
- Questa funzione è da utilizzare con le query GQL che utilizzano associazioni di parametri (
:1,:2e così via) o associazioni denominate (:foo,:bare 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 aqry.bind(region = "USA", threshold = 49).Restituisce un nuovo oggetto
Querycon 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
Futureil 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
Futureil 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.
(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
boolche indica se ci sono (probabilmente) altri risultati dopo questo batch. SeFalse, non ci sono altri risultati; seTrue, 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 utilizzandocursor.urlsafe()e ricostruirlo in una richiesta successiva utilizzandoCursor(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
Futurefacoltativa; 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 fornitopass_batch_into_callback=True, il callback viene chiamato con tre argomenti: il batch corrente, l'indice all'interno del batch e l'entità oKeyin 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_futuremerge_futureè un argomento avanzato che può essere utilizzato per sostituire il modo in cui i risultati del callback vengono combinati nel valore restituito complessivo dimap(). 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 ditasklets.MultiFutureper l'implementazione predefinita e una descrizione del protocollo che l'oggettomerge_futuredeve implementare. Le alternative dello stesso modulo includonoQueueFuture,SerialQueueFutureeReducingFuture.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().