Nota: Gli sviluppatori che creano nuove applicazioni sono vivamente incoraggiati a utilizzare il Libreria client NDB, che offre numerosi vantaggi rispetto a questa libreria client, come la memorizzazione automatica nella cache delle entità tramite API. Se al momento utilizzi la libreria client DB precedente, leggi il Guida alla migrazione da database a NDB
Le funzioni descritte in questa pagina sono definite
google.appengine.ext.db
pacco.
Funzioni
- allocate_ids (modello, numero)
-
Consente di allocare un batch di ID in Datastore per un tipo e un padre Datastore combinazione.
Gli ID allocati in questo modo non saranno utilizzati generatore di sequenze di ID automatico e può essere utilizzato chiavi di entità senza conflitti.
Argomenti
- modello
- La chiave del modello per cui allocare un batch di ID. Si tratta di una normale chiave, ma solo l'elemento padre e il tipo di chiave sono necessari per determinare quale Sequenza di ID da utilizzare.
- count
- Il numero di ID da allocare.
Restituisce una tupla del primo e dell'ultimo ID allocati. Ad esempio: se allochi 10 ID utilizzando questa funzione, otterresti un ritorno (1, 10), non un elenco completo degli ID creati.
Esempio di allocazione e utilizzo degli ID:
# allocate for MyModel without an instance handmade_key = db.Key.from_path('MyModel', 1) first_batch = db.allocate_ids(handmade_key, 10) first_range = range(first_batch[0], first_batch[1] + 1) # or allocate using an existing key model_instance = MyModel.all().get() second_batch = db.allocate_ids(model_instance.key(), 10) second_range = range(second_batch[0], second_batch[1] + 1) # and then use them! woo! my_id = second_range.pop(0) new_key = db.Key.from_path('MyModel', my_id) new_instance = MyModel(key=new_key) new_instance.put() assert new_instance.key().id() == my_id # the Datastore will not assign ids in first_batch or second_batch another_instance = MyModel() another_instance.put() assert another_instance.key().id() not in first_range assert another_instance.key().id() not in second_range
- allocate_ids_async (modello, numero)
-
Alloca in modo asincrono un batch di ID in Datastore per un Datastore di tipo e padre.
Questa funzione è identica a
allocate_ids()
ma restituisce un oggetto asincrono. Puoi chiamareget_result()
sul valore restituito per bloccare la chiamata e restituire il risultato.Argomenti
- modello
- A
db.Model
di Compute Engine, chiave, o stringa che funga da modello specificando la sequenza ID in cui allocano gli ID. Gli ID restituiti devono essere utilizzati solo in entità con lo stesso principale (se presente) e di tipo tipo questa chiave. - count
- Il numero di ID da allocare.
Restituisce una tupla del primo e dell'ultimo ID allocati. Ad esempio: se hai allocato 10 ID utilizzando questa funzione, otterresti un valore restituito il formato (1, 10), non un elenco completo degli ID creati.
- allocate_id_range (modello, avvia, end, **kwargs)
-
Consente di allocare un intervallo di ID con endpoint specifici. Una volta che questi ID allocati, puoi assegnarle manualmente alle entità appena create.
L'allocatore automatico di ID di Datastore non assegna mai una chiave già allocati (tramite l'allocazione automatica degli ID o chiamata "allocate_id" esplicita). Di conseguenza, le entità scritte un determinato intervallo di chiavi non verrà mai sovrascritto. Tuttavia, la scrittura di entità con le chiavi assegnate manualmente in questo intervallo potrebbero sovrascrivere entità esistenti (o nuove entità scritte da una richiesta separata), a seconda dello stato dell'intervallo di chiavi restituito.
Utilizza questa funzione solo se hai un intervallo ID numerico esistente vuoi prenotare (ad esempio, il caricamento collettivo di entità che hanno già ID). Se non ti interessano i documenti di identità che ricevi, utilizza
allocate_ids()
.Argomenti
- modello
- A
db.Model
di Compute Engine, chiave, o stringa che funga da modello specificando la sequenza ID in cui allocano gli ID. Gli ID restituiti devono essere utilizzati solo in entità con lo stesso principale (se presente) e di tipo tipo questa chiave. - avvia
- Il primo ID da allocare: un numero.
- fine
- L'ultimo ID da allocare: un numero.
Restituisce uno dei valori (
KEY_RANGE_EMPTY
,KEY_RANGE_CONTENTION
eKEY_RANGE_COLLISION
). In caso contrarioKEY_RANGE_EMPTY
, rappresenta un potenziale problema relativo all'utilizzo l'intervallo di chiavi allocato. - create_transaction_options (**kwargs)
-
Crea un oggetto delle opzioni di transazione (classe
TransactionOptions
) per controllare l'esecuzione delle transazioni. Tu passa l'oggetto risultante come primo argomentorun_in_transaction_options()
personalizzata.Argomenti
- propagazione
- Cosa fare se questa funzione transazionale viene chiamata all'interno di un'altra transazione:
- CONSENTITO
- Se la transazione è già in corso, continua a utilizzarla. in caso contrario, avviane una.
Nota:se una funzione che utilizza questo criterio genera un'eccezione, probabilmente non è sicuro rilevare l'eccezione ed eseguire il commit della transazione esterna. la funzione potrebbe aver lasciato la transazione esterna in uno stato non valido.
- OBBLIGATORIO
- Continua con la transazione esistente, se presente; In caso contrario, inserisci un
BadRequestError
un'eccezione.Nota:se una funzione che utilizza questo criterio genera un'eccezione, probabilmente non è sicuro rilevare l'eccezione ed eseguire il commit della transazione esterna. la funzione potrebbe aver lasciato la transazione esterna in uno stato non valido.
- INDIPENDENTE
- Crea una nuova transazione, mettendo in pausa qualsiasi transazione esistente.
Nota: una funzione che utilizza questo criterio non deve restituire entità lette nella nuova transazione, poiché le entità non sono coerenti dal punto di vista transazionale con la transazione esterna.
- NESTATO
- (Non ancora supportato) Crea una transazione nidificata all'interno di una transazione esistente.
- xg
- Se
True
, consenti . transazioni cross-group (XG). Genera unBadArgumentError
se impostato su un valore non booleano. - nuovi tentativi
- Numero di nuovi tentativi in caso di errore del commit della transazione.
- scadenza
- Tempo massimo, in secondi, di attesa che Datastore restituisca un risultato prima di interrompere con un errore. Accetta un valore intero o con rappresentazione in virgola mobile. Non può essere impostato su un valore superiore al valore predefinito (60 secondi), ma può essere modificato verso il basso per garantire che una determinata operazione non vada a buon fine rapidamente (ad esempio per restituire una risposta più rapida all'utente, riprovare a eseguire l'operazione, provare un'operazione diversa o aggiungerla a una coda di attività).
L'esempio seguente crea le opzioni per una richiesta transazione tra gruppi (XG):
from google.appengine.ext import db xg_on = db.create_transaction_options(xg=True) def my_txn(): x = MyModel(a=3) x.put() y = MyModel(a=7) y.put() db.run_in_transaction_options(xg_on, my_txn)
- elimina (modelli, scadenza=60)
-
Elimina una o più istanze del modello da Datastore.
Argomenti
- modelli
- Un'istanza del modello, chiave entità, o un elenco (o altro iterabile) di istanze di modelli o chiavi di entità eliminare.
- scadenza
- Tempo massimo, in secondi, di attesa che Datastore restituisca un risultato prima di interrompere con un errore. Accetta un valore intero o con rappresentazione in virgola mobile. Non può essere impostato su un valore superiore al valore predefinito (60 secondi), ma può essere modificato verso il basso per garantire che una determinata operazione non vada a buon fine rapidamente (ad esempio per restituire una risposta più rapida all'utente, riprovare a eseguire l'operazione, provare un'operazione diversa o aggiungerla a una coda di attività).
Come con
put()
, se vengono assegnate più chiavi, potrebbero trovarsi in più chiavi gruppo di entità.Verrà sempre sollevata un'eccezione se si verifica un errore durante il anche se alcune entità sono state effettivamente eliminate. Se la chiamata i resi senza generare un'eccezione, tutte le entità sono state eliminate correttamente.
Attenzione:l'eliminazione di più entità in una singola operazione non garantisce che l'eliminazione venga eseguita a livello atomico, a meno che l'operazione non venga eseguita all'interno di transazione. Altri processi che eseguono query su Datastore potrebbero vedere risultati incoerenti anche quando la query viene eseguita con elevata coerenza.
- delete_async (modelli, scadenza=60)
-
Elimina in modo asincrono una o più istanze del modello Datastore.
Questa funzione è identica a
delete()
ma restituisce un oggetto asincrono. Puoi chiamareget_result()
sul valore restituito da bloccare durante la chiamata.Argomenti
- modelli
- Un'istanza del modello, chiave entità, o un elenco (o altro iterabile) di istanze di modelli o chiavi di entità eliminare.
- scadenza
- Tempo massimo, in secondi, di attesa che Datastore restituisca un risultato prima di interrompere con un errore. Accetta un valore intero o con rappresentazione in virgola mobile. Non può essere impostato su un valore superiore al valore predefinito (60 secondi), ma può essere modificato verso il basso per garantire che una determinata operazione non vada a buon fine rapidamente (ad esempio per restituire una risposta più rapida all'utente, riprovare a eseguire l'operazione, provare un'operazione diversa o aggiungerla a una coda di attività).
Come con
put()
, se vengono assegnate più chiavi, potrebbero trovarsi in più chiavi gruppo di entità.Questa funzione restituisce un oggetto che consente di bloccare il risultato della query chiamata.
Verrà sempre sollevata un'eccezione se si verifica un errore durante il anche se alcune entità sono state effettivamente eliminate. Se la chiamata i resi senza generare un'eccezione, tutte le entità sono state eliminate correttamente.
Attenzione:l'eliminazione di più entità in una singola operazione non garantisce che l'eliminazione venga eseguita a livello atomico, a meno che l'operazione non venga eseguita all'interno di transazione. Altri processi che eseguono query su Datastore potrebbero vedere risultati incoerenti anche quando la query viene eseguita con elevata coerenza.
- trova (chiavi, read_policy=STRONG_CONSISTENCY, scadenza=60)
-
Recupera le istanze di modello specifiche con le chiavi specificate dal Datastore.
Argomenti
- tasti
- Chiave di entità da recuperare, una rappresentazione stringa della chiave o un elenco di chiavi o relative rappresentazioni di stringa.
- read_policy
- Leggi il criterio che specifica il livello desiderato di coerenza dei dati:
- STRONG_CONSISTENCY
- Garantisce i risultati più recenti, ma limitati a una singola gruppo di entità.
- EVENTUAL_CONSISTENCY
- Può abbracciare più gruppi di entità, ma occasionalmente può ritornare i risultati obsoleti. In generale, le query a coerenza finale vengono eseguite è più veloce rispetto a query a elevata coerenza, ma non c'è alcuna garanzia.
Nota: le query globali (non predecessori) ignorano questo argomento.
- scadenza
- Tempo massimo, in secondi, di attesa che Datastore restituisca un risultato prima di interrompere con un errore. Accetta un valore intero o con rappresentazione in virgola mobile. Non può essere impostato su un valore superiore al valore predefinito (60 secondi), ma può essere modificato verso il basso per garantire che una determinata operazione non vada a buon fine rapidamente (ad esempio per restituire una risposta più rapida all'utente, riprovare a eseguire l'operazione, provare un'operazione diversa o aggiungerla a una coda di attività).
Se
keys
è composto da una singola chiave (o dalla relativa stringa) ), questa funzione restituisce l'istanza del modello associata la chiave se esiste in Datastore, altrimenti inNone
. Sekeys
è un elenco, il valore restituito è un elenco corrispondente di di istanze di modello, con valoriNone
in cui non esiste alcuna entità per una data chiave.Vedi anche
Model.get()
. - get_async (chiavi, read_policy=STRONG_CONSISTENCY, scadenza=60)
-
Recupera in modo asincrono le istanze del modello specificate dal Datastore.
Questa funzione è identica a
get()
ma restituisce un oggetto asincrono. Puoi chiamareget_result()
sul valore restituito per bloccare la chiamata e ottenere i risultati.Argomenti
- tasti
- Chiave di entità da recuperare, una rappresentazione stringa della chiave o un elenco di chiavi o relative rappresentazioni di stringa.
- read_policy
- Leggi il criterio che specifica il livello desiderato di coerenza dei dati:
- STRONG_CONSISTENCY
- Garantisce i risultati più recenti, ma limitati a una singola gruppo di entità.
- EVENTUAL_CONSISTENCY
- Può abbracciare più gruppi di entità, ma occasionalmente può ritornare i risultati obsoleti. In generale, le query a coerenza finale vengono eseguite è più veloce rispetto a query a elevata coerenza, ma non c'è alcuna garanzia.
Nota: le query globali (non predecessori) ignorano questo argomento.
- scadenza
- Tempo massimo, in secondi, di attesa che Datastore restituisca un risultato prima di interrompere con un errore. Accetta un valore intero o con rappresentazione in virgola mobile. Non può essere impostato su un valore superiore al valore predefinito (60 secondi), ma può essere modificato verso il basso per garantire che una determinata operazione non vada a buon fine rapidamente (ad esempio per restituire una risposta più rapida all'utente, riprovare a eseguire l'operazione, provare un'operazione diversa o aggiungerla a una coda di attività).
Se
keys
è composto da una singola chiave (o dalla relativa stringa) ), questa funzione restituisce l'istanza del modello associata la chiave se esiste in Datastore, altrimenti inNone
. Sekeys
è un elenco, il valore restituito è un elenco corrispondente di di istanze di modello, con valoriNone
in cui non esiste alcuna entità per una data chiave.Vedi anche
Model.get()
. - get_indexes ()
-
Restituisce un elenco di indici composti appartenenti alla chiamata un'applicazione.
L'esempio seguente illustra come ottenere e utilizzare gli indici:
def get_index_state_as_string(index_state): return {db.Index.BUILDING:'BUILDING', db.Index.SERVING:'SERVING', db.Index.DELETING:'DELETING', db.Index.ERROR:'ERROR'}[index_state] def get_sort_direction_as_string(sort_direction): return {db.Index.ASCENDING:'ASCENDING', db.Index.DESCENDING:'DESCENDING'}[sort_direction] def dump_indexes(): for index, state in db.get_indexes(): print "Kind: %s" % index.kind() print "State: %s" % get_index_state_as_string(state) print "Is ancestor: %s" % index.has_ancestor() for property_name, sort_direction in index.properties(): print " %s:%s" % (property_name, get_sort_direction_as_string(sort_direction))
- get_indexes_async ()
-
Restituisce in modo asincrono un elenco di indici composti appartenenti al applicazione di chiamata.
- is_in_transaction ()
-
Restituisce un valore booleano che indica se l'ambito corrente è in esecuzione in una transazione.
- model_to_protobuf (model_instance)
-
Crea la serializzazione del buffer di protocollo di un
Model
in esecuzione in un'istanza Compute Engine. Un buffer di protocollo è il formato di serializzazione di Google utilizzato per le di procedure e può essere utile per serializzare gli oggetti Datastore per scopi di backup e ripristino.Attenzione: questa funzione utilizza una diversa (precedente) per i buffer di protocollo . il formato di buffer del protocollo open source, e non è compatibile con l'implementazione open source.
Argomento
- model_instance
- L'istanza della classe
Model
(o una sottoclasse) da serializzare.
Restituisce la serializzazione del buffer di protocollo dell'oggetto, come byte stringa.
- model_from_protobuf (pb)
-
Crea un'istanza
Model
basata su un buffer di protocollo serializzazione, vedimodel_to_protobuf()
per ulteriori informazioni.Argomento
- pb
- La serializzazione del buffer di protocollo, come restituita
model_to_protobuf()
.
Restituisce un oggetto della classe kind appropriata. Se la classe kind inesistente, genera
KindError
un'eccezione. Se l'oggetto non è valido secondo il modello, genera unBadValueError
un'eccezione.Puoi salvare il nuovo oggetto in Datastore come qualsiasi altro oggetto
Model
, ad esempio chiamando la suaput()
. L'oggetto conserva la chiave che aveva quando il buffer di protocollo è stato creato. Se un oggetto con quella chiave esiste già in Datastore, il salvataggio l'oggetto deserializzato sovrascrive l'oggetto esistente.Attenzione: se la chiave dell'oggetto utilizza un oggetto assegnato dal sistema e questo ID non è già stato assegnato percorso e tipo, il salvataggio avrà esito positivo, ma l'ID non è riservato. Un oggetto creato in futuro potrebbe essere assegnato a quell'ID e sovrascriverà il valore dell'oggetto precedente. Per sicurezza, ripristina gli oggetti solo nella stessa applicazione dove erano quando sono stati serializzati.
- model_is_projection (model_instance)
-
Restituisce
True
se la query specificata (model_instance
) è un query di proiezione anziché una query per un'entità completa.Argomento
- model_instance
- La query che stai controllando per determinare se si tratta di una proiezione query.
Restituisce
True
se la query è una query di proiezione,False
se non lo è. - metti (modelli, scadenza=60)
-
Scrive una o più istanze del modello in Datastore.
Argomenti
- modelli
- Un'istanza del modello o un elenco di istanze di modello da archiviare.
- scadenza
- Tempo massimo, in secondi, di attesa che Datastore restituisca un risultato prima di interrompere con un errore. Accetta un valore intero o con rappresentazione in virgola mobile. Non può essere impostato su un valore superiore al valore predefinito (60 secondi), ma può essere modificato verso il basso per garantire che una determinata operazione non vada a buon fine rapidamente (ad esempio per restituire una risposta più rapida all'utente, riprovare a eseguire l'operazione, provare un'operazione diversa o aggiungerla a una coda di attività).
Se vengono indicate più istanze del modello, queste potrebbero trovarsi in più di una gruppo di entità.
Verrà sempre sollevata un'eccezione se si verifica un errore durante il anche se alcune delle entità sono state effettivamente scritte. Se la chiamata restituisce senza sollevare un'eccezione, allora tutte le entità sono state scritte correttamente.
Se
models
è costituito da una singola istanza del modello, questa funzione restituisce il codice Chiave . Semodels
è un elenco, il valore restituito è un elenco di corrispondente Chiave di oggetti strutturati.Attenzione: scrivere più entità in una una singola operazione non garantisce che le scritture vengano eseguite a livello atomico, a meno che l'operazione non venga eseguita all'interno di transazione. Altri processi che eseguono query su Datastore potrebbero vedere risultati incoerenti anche quando la query viene eseguita con elevata coerenza.
- put_async (modelli, scadenza=60)
-
Scrive una o più istanze del modello in Datastore.
Questa funzione è identica a
put()
ma restituisce un oggetto asincrono. Puoi chiamareget_result()
sul valore restituito per bloccare la chiamata e ottenere i risultati.Argomenti
- modelli
- Un'istanza del modello o un elenco di istanze di modello da archiviare.
- scadenza
- Tempo massimo, in secondi, di attesa che Datastore restituisca un risultato prima di interrompere con un errore. Accetta un valore intero o con rappresentazione in virgola mobile. Non può essere impostato su un valore superiore al valore predefinito (60 secondi), ma può essere modificato verso il basso per garantire che una determinata operazione non vada a buon fine rapidamente (ad esempio per restituire una risposta più rapida all'utente, riprovare a eseguire l'operazione, provare un'operazione diversa o aggiungerla a una coda di attività).
Se vengono indicate più istanze del modello, queste potrebbero trovarsi in più di una gruppo di entità.
Verrà sempre sollevata un'eccezione se si verifica un errore durante il anche se alcune delle entità sono state effettivamente scritte. Se la chiamata restituisce senza sollevare un'eccezione, allora tutte le entità sono state scritte correttamente.
Questa funzione restituisce un oggetto asincrono su cui
get_result()
di Google Cloud. I risultati restituiti sono gli stessi di quelli perput()
.Attenzione: scrivere più entità in una una singola operazione non garantisce che le scritture vengano eseguite a livello atomico, a meno che l'operazione non venga eseguita all'interno di transazione. Altri processi che eseguono query su Datastore potrebbero vedere risultati incoerenti anche quando la query viene eseguita con elevata coerenza.
- query_descendants (model_instance)
-
Restituisce una query per tutti i discendenti di un'istanza del modello.
Argomento
- model_instance
- L'istanza del modello di cui vuoi trovare i discendenti.
- run_in_transaction (funzione, *args, **kwargs)
-
Esegue una funzione contenente gli aggiornamenti di Datastore in una singola transazione. Se un codice genera un'eccezione durante la transazione, tutti gli aggiornamenti apportati viene eseguito il rollback della transazione. In alternativa, puoi utilizzare
@db.transactional()
decoratore.Argomenti
- funzione
- Funzione da eseguire.
- args
- Argomenti posizionali da passare alla funzione.
- kwargs
- Argomenti delle parole chiave da passare alla funzione.
Se la funzione restituisce un valore,
run_in_transaction()
restituisce il valore al chiamante.Se la funzione genera un'eccezione, viene eseguito il rollback della transazione. Se l'eccezione è
Rollback
eccezione, non viene rilanciato. qualsiasi altra eccezione viene sollevata nuovamente chiamante.Datastore utilizza il blocco ottimistico e i nuovi tentativi per le transazioni. Se non è possibile eseguire il commit della transazione preparata dalla funzione,
run_in_transaction()
chiama di nuovo la funzione, riprovando a transazione fino a 3 volte. (per utilizzare un numero diverso di nuovi tentativi, utilizzarun_in_transaction_custom_retries()
. Poiché la funzione di transazione può essere chiamata più di una volta per un singolo transazione, la funzione non deve avere effetti collaterali, ad esempio modifiche agli argomenti.Se non è possibile impegnarsi per la transazione, ad esempio a causa di un tasso elevato di una contesa, un
TransactionFailedError
viene sollevata un'eccezione.from google.appengine.ext import db class Counter(db.Model): name = db.StringProperty() count = db.IntegerProperty(default=0) def decrement(key, amount=1): counter = db.get(key) counter.count -= amount if counter.count < 0: # Don't let counter go negative raise db.Rollback() db.put(counter) q = db.GqlQuery("SELECT * FROM Counter WHERE name = :1", "foo") counter = q.get() db.run_in_transaction(decrement, counter.key(), amount=5)
- run_in_transaction_custom_retries (nuovi tentativi, funzione, *args, **kwargs)
-
Esegue una funzione contenente gli aggiornamenti di Datastore in una singola transazione, riprova a eseguire la transazione per un numero di volte specificato nel caso in cui conflittuale. Se un codice genera un'eccezione durante la transazione, vengono eseguiti il rollback degli aggiornamenti apportati alla transazione.
Oltre alla possibilità di specificare il numero di nuovi tentativi, questa funzione si comporta in modo identico
run_in_transaction()
.Argomenti
- nuovi tentativi
- Numero massimo di volte in cui è possibile chiamare la funzione nel caso di: contesa all'interno del gruppo di entità (più di un utente che tenta di modificare il gruppo contemporaneamente).
- funzione
- Funzione da eseguire.
- args
- Argomenti posizionali da passare alla funzione.
- kwargs
- Argomenti delle parole chiave da passare alla funzione.
- run_in_transaction_options (opzioni, funzione, *args, **kwargs)
-
Esegue una funzione contenente gli aggiornamenti di Datastore in una singola transazione utilizzando le opzioni specificate in delle opzioni di transazione. Se un codice genera un'eccezione durante la transazione, tutti Datastore vengono eseguiti il rollback degli aggiornamenti apportati alla transazione.
Per transazioni cross-group (XG), È necessario impostare il parametro
xg
nell'oggetto delle opzioni di transazione aTrue
.Argomenti
- opzioni
- L'oggetto delle opzioni di transazione contenente le impostazioni utilizzate da
transazione. Per abilitare le transazioni XG, il relativo parametro xg deve essere impostato su
True
. - funzione
- Funzione da eseguire.
- args
- Argomenti posizionali da passare alla funzione.
- kwargs
- Argomenti delle parole chiave da passare alla funzione.
Se la funzione restituisce un valore,
run_in_transaction_options()
restituisce il valore al parametro chiamante.Se la funzione genera un'eccezione, viene eseguito il rollback della transazione. Se l'eccezione è
Rollback
eccezione, non viene rilanciato. qualsiasi altra eccezione viene sollevata nuovamente chiamante.Datastore utilizza il blocco ottimistico e i nuovi tentativi per le transazioni. Se non è possibile eseguire il commit della transazione preparata dalla funzione,
run_in_transaction_options()
chiama di nuovo la funzione, nuovo tentativo in corso la transazione fino al numero di nuovi tentativi specificati nella transazione . Poiché la funzione di transazione può essere chiamata più di una volta per una singola transazione, la funzione non deve avere effetti collaterali, incluse le modifiche agli argomenti.Se non è possibile impegnarsi per la transazione, ad esempio a causa di un tasso elevato di una contesa, un
TransactionFailedError
viene sollevata un'eccezione.L'esempio seguente mostra come utilizzare questa funzione per eseguire un transazione tra gruppi:
from google.appengine.ext import db xg_options = db.create_transaction_options(xg=True) def my_txn(): x = MyModel(a=3) x.put() y = MyModel(a=7) y.put() db.run_in_transaction_options(xg_options, my_txn)
- to_dict (model_instance, dictionary=Nessuno)
-
Crea e restituisce una rappresentazione nel dizionario di un'istanza del modello.
Argomenti
- model_instance
- Istanza modello da copiare.
- dizionario
- Se presente, il dizionario in cui unire i dati del modello. Modello i valori sovrascrivono i valori nel dizionario; voci del dizionario non corrispondenti ai campi nell'istanza del modello vengono conservati.
Decoratori
- @db.transactional (propagation=ALLOWED, xg=Falso, retries=3, scadenza=60)
-
Consente di eseguire una funzione all'interno di una transazione
db
. Di conseguenza, di chiamarerun_in_transaction(func)
, puoi chiamarefunc()
.Argomenti
- propagazione
- Cosa fare se questa funzione transazionale viene chiamata all'interno di un'altra transazione:
- CONSENTITO
- Se la transazione è già in corso, continua a utilizzarla. in caso contrario, avviane una.
Nota:se una funzione che utilizza questo criterio genera un'eccezione, probabilmente non è sicuro rilevare l'eccezione ed eseguire il commit della transazione esterna. la funzione potrebbe aver lasciato la transazione esterna in uno stato non valido.
- OBBLIGATORIO
- Continua con la transazione esistente, se presente; In caso contrario, inserisci un
BadRequestError
un'eccezione.Nota:se una funzione che utilizza questo criterio genera un'eccezione, probabilmente non è sicuro rilevare l'eccezione ed eseguire il commit della transazione esterna. la funzione potrebbe aver lasciato la transazione esterna in uno stato non valido.
- INDIPENDENTE
- Crea una nuova transazione, mettendo in pausa qualsiasi transazione esistente.
Nota: una funzione che utilizza questo criterio non deve restituire entità lette nella nuova transazione, poiché le entità non sono coerenti dal punto di vista transazionale con la transazione esterna.
- NESTATO
- (Non ancora supportato) Crea una transazione nidificata all'interno di una transazione esistente.
- xg
- Se
True
, consenti . transazioni cross-group (XG). Genera unBadArgumentError
se impostato su un valore non booleano. - nuovi tentativi
- Numero di nuovi tentativi in caso di errore del commit della transazione.
- scadenza
- Tempo massimo, in secondi, di attesa che Datastore restituisca un risultato prima di interrompere con un errore. Accetta un valore intero o con rappresentazione in virgola mobile. Non può essere impostato su un valore superiore al valore predefinito (60 secondi), ma può essere modificato verso il basso per garantire che una determinata operazione non vada a buon fine rapidamente (ad esempio per restituire una risposta più rapida all'utente, riprovare a eseguire l'operazione, provare un'operazione diversa o aggiungerla a una coda di attività).
- @db.non_transactional (allow_existing=True)
-
Garantisce che una funzione venga eseguita all'esterno di una transazione
db
, anche se viene chiamato dall'interno di una transazione.Argomento
- allow_existing
- Se
True
, consenti di chiamare la funzione dall'interno di un transazione esistente; seFalse
, lancia unBadRequestError
.