Funzioni NDB

Funzioni

ndb.add_flow_exception(exc)
Specifica che un'eccezione non deve essere registrata, ma fa solo parte del flusso di programma normale. (Di solito, l'aumento di un'eccezione comporta la creazione di un avviso nei log dell'applicazione).

Argomenti

eccessi
Classe di eccezione che non deve essere registrata.

Per impostazione predefinita, non vengono registrate le seguenti eccezioni:

  • webob.exc.HTTPException (e relative sottoclassi)
  • ndb.Rollback
ndb.delete_multi(chiavi, **ctx_options)
Elimina le entità identificate dalla sequenza di chiavi passata.

Argomenti

tasti
Sequenza di chiavi
**ctx_options
Opzioni di contesto
ndb.delete_multi_async(keys, **ctx_options)
Elimina in modo asincrono le entità identificate dalla sequenza di chiavi passata.

Argomenti

tasti
Sequenza di chiavi
**ctx_options
Opzioni di contesto

Restituisce un elenco di Future di oggetti strutturati. Il risultato di ogni futuro sarà None.

ndb.get_multi(chiavi, **ctx_options)
Recupera le entità identificate dalla sequenza di chiavi passata.

Argomenti

tasti
Sequenza di chiavi
**ctx_options
Opzioni di contesto

Restituisce un elenco. Ogni voce dell'elenco può essere Istanza Modello o None se la chiave non è stata trovata.

ndb.get_multi_async(keys, **ctx_options)
Recupera in modo asincrono le entità identificate dalla sequenza di chiavi passata.

Argomenti

tasti
Sequenza di chiavi
**ctx_options
Opzioni di contesto

Restituisce un elenco di Future di oggetti strutturati. Il risultato di ogni futuro è Istanza Modello o None se la chiave non è stata trovata.

ndb.in_transaction()
Restituisci un valore booleano che indica se una transazione è attualmente attiva.
@ndb.non_transactional
@ndb.non_transactional(allow_existing=True)
Decoratore per garantire che una funzione venga eseguita al di fuori di una transazione.

Argomenti:

allow_existing
Se True (valore predefinito) e se la funzione decorata viene richiamata dal codice in una transazione, la funzione esegue della transazione. Se False e se la funzione decorata viene richiamata dal codice in una transazione, solleva un'eccezione.
ndb.put_multi(entità, **ctx_options)
Archivia una sequenza di istanze Modello.

Argomenti

entità
Sequenza di istanze Model
**ctx_options
Opzioni di contesto

Restituisce un elenco con le chiavi archiviate.

ndb.put_multi_async(entities, **ctx_options)
Archivia in modo asincrono una sequenza di Modello.

Argomenti

entità
Sequenza di istanze Model
**ctx_options
Opzioni di contesto

Restituisce un elenco di Future di oggetti strutturati. Il risultato di ogni futuro sarà una chiave memorizzata.

ndb.transaction(callback, **ctx_options)
Esegui un callback in una transazione.

Argomenti

richiamata
Funzione o tasklet da chiamare
**ctx_options
Opzioni di transazione

Restituisce il valore restituito da callback. Solleva qualsiasi callback sollevato o Eccezione TransactionFailedError se la transazione non va a buon fine.

Per passare argomenti a una funzione di callback, utilizza una funzione lambda. Ad esempio:

def my_callback(key, inc):
  ...

transaction(lambda: my_callback(Key(...), 1))

ndb.transaction_async(callback, **ctx_options)
Esegui un callback in modo asincrono in una transazione.

Argomenti

richiamata
Funzione o tasklet da chiamare
**ctx_options
Opzioni di transazione

Restituisce un Future. Il futuro restituisce qualsiasi callback restituito, oppure genera qualsiasi evento per callback sollevato TransactionFailedError se la transazione non va a buon fine.

Per passare argomenti a una funzione di callback, utilizza una funzione lambda. Ad esempio:

def my_callback(key, inc):
  ...

transaction(lambda: my_callback(Key(...), 1))

@ndb.transactional
@ndb.transactional(**ctx_options)
Decoratore per eseguire automaticamente una funzione in una transazione.

Argomenti:

Questo decorator può avere opzioni di transazione.

Opzioni di contesto, Opzioni di transazione

Le opzioni di contesto consentono di eseguire operazioni specifiche sul datastore con diverse configurazioni. Ad esempio, potresti voler variare il criterio per la lettura o la scadenza RPC per le singole richieste. Puoi farlo passando le opzioni di contesto a quasi tutte le operazioni. Alcune funzioni correlate alle transazioni prendono in considerazione le opzioni di transazione, che includono opzioni aggiuntive. in aggiunta a una serie di opzioni di contesto.

Ecco alcuni esempi di utilizzo delle opzioni di contesto. Per impostare la scadenza RPC su 1 secondo durante la lettura di un'entità, puoi utilizzare:

key.get(deadline=1)

Per impostare il timeout memcache su 30 secondi quando scrivi un'entità, puoi utilizzare:

ent.put(ndb_memcache_timeout=30)

Per eliminare un elemento che è stato memorizzato nella cache e forzarne il ricaricamento, puoi utilizzare:

key.delete(use_datastore=False)

Gli argomenti speciali delle parole chiave options e config (che hanno significati identici per motivi storici) consentono di specificare diverse opzioni come oggetto di configurazione. Può essere ndb.ContextOptions oggetto o (per le funzioni transazionali e il decorator) Oggetto ndb.TransactionOptions. Ad esempio: key.get(options=ndb.ContextOptions(use_cache=True)) equivale a key.get(use_cache=True). Le opzioni impostate in un oggetto opzioni di questo tipo possono essere sostituite da parametri delle parole chiave.

Sono disponibili le seguenti opzioni di contesto:

Opzione Tipo Descrizione
deadline float Scadenza della chiamata Datastore, specificata in un numero di secondi. Per impostazione predefinita, la chiamata viene interrotta solo richiesta di scadenza del gestore delle richieste).
read_policy ndb.EVENTUAL_CONSISTENCY Imposta questo valore su ndb.EVENTUAL_CONSISTENCY se anziché su in attesa che Datastore termini l'applicazione delle modifiche a tutti i risultati di ricerca, ti consigliamo di ottenere più rapidamente i risultati che potrebbero non essere attuali.
force_writes bool Specifica se una richiesta di scrittura deve riuscire anche se l'app è di sola lettura. Questo vale solo per i periodi di sola lettura controllati dall'utente.
use_cache bool Specifica se archiviare le entità nella cache in-process. sostituisce il criterio della cache in-process per questa operazione.
use_memcache bool Specifica se archiviare le entità in memcache; sostituisce il criterio memcache per questa operazione.
use_datastore bool Specifica se archiviare le entità in Datastore; sostituisce il criterio Datastore per questa operazione.
memcache_timeout int Durata massima delle entità in memcache; sostituisce il criterio di timeout memcache per questa operazione.
max_memcache_items int Dimensione massima del batch per la funzione di batch automatico del Metodi memcache contesto. Ad esempio, con la dimensione predefinita max_memcache_items (100), verranno combinate fino a 100 operazioni di set memcache in un singola operazione set_multi.

Per alcune funzioni relative alle transazioni, sono disponibili le seguenti opzioni di transazione (oltre alle opzioni di contesto ereditate sopra elencate):

Opzione Tipo Descrizione
xg bool Consenti transazioni tra gruppi (XG). False per impostazione predefinita.
propagation int

NDB fornisce un supporto limitato per le transazioni all'interno delle transazioni, sono note come "transazioni nidificate".

Il parametro di propagazione controlla cosa succede se il codice prova ad avviare un modello transazione.

Il criterio di propagazione per @ndb.transactional è impostato su ALLOWED per impostazione predefinita.

Il criterio di propagazione per ndb.transaction() è impostato su NESTED per impostazione predefinita. Il criterio NESTED non è supportato da NDB, pertanto il tuo codice genererà un'eccezione BadRequestError. L'NDB imposta valore predefinito non supportato, in questo caso, in modo che i programmatori siano a conoscenza esplicitamente del limiti delle transazioni nidificate.

Il parametro di propagazione può essere uno dei seguenti valori:

ndb.TransactionOptions.NESTED
Il criterio di propagazione NESTED eseguirà il commit di tutte le modifiche nell'ambiente esterno e le transazioni interne quando viene eseguito il commit del criterio esterno. Tuttavia, se viene generata un'eccezione nella transazione interna tutte le modifiche verrebbero scartate, ma consentirebbero transazione da recuperare e continuare facoltativamente. Il criterio NESTED non è supportati. Se utilizzi questo criterio, il codice genererà un'eccezione BadRequestError eccezione.
ndb.TransactionOptions.MANDATORY
Propaga sempre una transazione esistente; genera un'eccezione se non sono presenti transazioni. Se una funzione che utilizza questo criterio genera un'eccezione, probabilmente non è sicuro individuare l'eccezione e impegnarsi la transazione esterna; la funzione potrebbe aver lasciato lo spazio della transazione non è valido.
ndb.TransactionOptions.ALLOWED
Se esiste già una transazione, propagala. Se una funzione che utilizza questo criterio genera un'eccezione, probabilmente non è sicuro individuare l'eccezione e impegnarsi la transazione esterna; la funzione potrebbe aver lasciato lo spazio della transazione non è valido.
ndb.TransactionOptions.INDEPENDENT
Utilizza sempre una nuova transazione, "messa in pausa" eventuali transazioni esistenti. Una funzione che utilizza questo criterio non dovrebbe restituire alcun valore le entità lette nella nuova transazione, come non sono coerenti dal punto di vista transazionale con transazione.
retries int Quante volte è possibile riprovare automaticamente in caso di errore delle transazioni. Zero significa che è necessario riprovare una volta ma non riprovare.

In alcuni casi, le opzioni vengono ignorate a causa della memorizzazione nella cache. Ad esempio, se specifichi una scadenza RPC per una lettura un'operazione soddisfatta dalla cache contestuale, la scadenza viene ignorata. D'altra parte, opzioni non riconosciute causano l'aumento di TypeError.

Le operazioni con opzioni diverse vengono raggruppate quando si applica il batch automatico. Ad esempio, se utilizzi put_async() scrivere alcune entità deadline = 5 e alcuni senza specificare una scadenza, e tutti sono idonei auto-batching, il batcher automatico creerà due RPC separate una per il gruppo di entità con deadline = 5 e uno per l'altro gruppo, anche se l'impostazione predefinita Anche la scadenza RPC è 5. Ciò vale anche se l'opzione specificata non è pertinente a l'operazione RPC (ad esempio, ndb_should_cache).