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 utilizzano un insieme standard di
disponibili sotto forma di argomenti delle parole 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
per iniziare.
projection=[Article.title, Article.date]
o projection=['title', 'date']
recupera le entità con questi due campi impostati.
(vedi Query di proiezione).
|
compensare | 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 della ricerca (vedi Cursori delle query). |
end_cursor | Cursor | None
| Punto finale per la ricerca (vedi Cursori delle query). |
scadenza | int | Dipende da Context
| Esegue l'override della scadenza RPC (che per impostazione predefinita è 5 secondi se non viene eseguito l'override quando
Context creato)
|
read_policy | ndb.EVENTUAL_CONSISTENCY
| Il criterio per la lettura. Impostalo su ndb.EVENTUAL_CONSISTENCY per ricevere
risultati forse più rapidi senza attendere che Datastore
applicare modifiche in sospeso a tutti i record restituiti.
|
Per eseguire una query con un insieme specifico di opzioni, passa 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 mantenere un insieme di opzioni di query
in giro e usarle in vari luoghi. Anche se si può fare
tienili in un dizionario e passalo al
utilizzando **kwds
, puoi anche creare un
QueryOptions
oggetto e passa
utilizzando l'argomento parola chiave delle opzioni.
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()
. Ma è anche possibile chiamare
ndb.Query()
.
Argomenti
- gentile
- Stringa di tipo facoltativa. Normalmente, il nome di una classe entità.
- predecessore
- Chiave predecessore facoltativa.
- filtri
- Nodo facoltativo che rappresenta un albero di espressioni di filtro.
- ordini
- 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
- Facoltativo
Oggetto
QueryOptions
offrendo opzioni di query predefinite da utilizzare durante l'esecuzione della 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 aqry.filter(filter1, filter2)
- get(**q_options)
- Restituisci il primo risultato della query, se presente (altrimenti
None
). È un'operazione simile alla chiamata aq.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, ...)
- Restituisci un nuovo
Query
con ordini di ordinamento aggiuntivi applicati. 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 aqry.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, puoi chiamare qualcosa del tipo
qry.bind("USA", 49)
. Per associare parametri con nome, puoi chiamare in modo simileqry.bind(region = "USA", threshold = 49)
.Restituisce un nuovo oggetto
Query
con i valori dei parametri associati. - count(limit=None, **q_options)
- Restituisci il numero di risultati della query, fino a un limite definito.
Viene restituito lo stesso risultato di
len(q.fetch(limit))
, ma un numero maggiore in modo efficiente.Argomenti
- limite
- Quanti risultati conteggiare al massimo
- **q_options
- Tutti gli argomenti delle parole chiave delle opzioni di query e le opzioni di contesto sono supportati.
- count_async(limit, **q_options)
- Conta in modo asincrono il numero di risultati delle query, fino a un limite definito.
restituisce un
Future
il cui risultato è un numero. Questa è la versione asincrona di count(). - fetch(limit, **q_options)
- Recupera un elenco di risultati delle query, fino a un limite definito.
Argomenti
- limite
- Quanti risultati conteggiare al massimo
- **q_options
- Tutti gli argomenti delle parole chiave delle opzioni di query sono supportati.
- 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(page_size, page_size)
- Recupera una "pagina" di risultati. Si tratta di un metodo specializzato
e possono essere usati con il paging delle interfacce utente.
Argomenti
- page_size
- Verranno restituiti al massimo questi risultati.
- **q_options
- Tutti gli argomenti delle parole chiave delle opzioni di query sono supportati.
(results, cursor, more)
:- results elenco di risultati della query
- cursor un cursore di query che punta
al "successivo" batch di risultati. Se non vengono visualizzati altri risultati, è possibile che
None
. - more
bool
che indica se sono presenti (probabilmente) dopo questo batch. SeFalse
, non ci sono altri risultati; SeTrue
, ci sono probabilmente più risultati.
Per recuperare la pagina successiva: passa il cursore restituito da una chiamata alla chiamata successiva utilizzando
start_cursor=cursor
. Un modo di dire comune è passare il cursore a il client utilizzandocursor.urlsafe()
e ricostruire il cursore su 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)
- 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
- Tutti gli argomenti delle parole chiave delle opzioni di query sono supportati.
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. Vale a dire che
Applicare la funzione (o il tasklet) a ciascuna entità nei risultati della query.
Argomenti
- richiamata
- Una funzione o un tasklet da applicare a ciascun risultato.
- pass_batch_into_callback
- Se
True
, chiama il callback con 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 di callback Il callback viene solitamente chiamato con un'entità come argomento. Tuttavia, se
keys_only=True
è specificato, si chiama con una chiave. Se viene specificatopass_batch_into_callback=True
, il callback è chiamata con tre argomenti: il batch corrente, l'indice all'interno il batch e l'entità oKey
in quell'indice. Il callback può restituire ciò che desidera. Se il callback èNone
, significa che si presume che restituisca solo l'entità o la chiave passata.Facoltativo
merge_future
Ilmerge_future
è un argomento avanzato che può essere utilizzata per eseguire l'override della combinazione dei risultati del callback nel valore restituito complessivo dimap()
. Per impostazione predefinita, un elenco vengono generati i valori restituiti del callback. Sostituendo uno di un numero limitato di alternative specializzate che puoi negli altri casi. Vedi il codice sorgente pertasklets.MultiFuture
per il valore predefinito implementazione e una descrizione il protocollomerge_future
da implementare. Alternative dallo stesso modulo includeQueueFuture
,SerialQueueFuture
eReducingFuture
.Restituisce un elenco dei risultati di tutti i callback. (vedi "
merge_future
facoltativo" sopra). Ritorna quando la query è stata eseguita fino al completamento e sono stati restituiti tutti i callback. - 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. Si tratta della versione asincrona di map().