Nota: gli sviluppatori che creano nuove applicazioni sono vivamente incoraggiati a utilizzare la libreria client NDB, che offre diversi vantaggi rispetto a questa libreria client, come la memorizzazione automatica nella cache delle entità tramite l'API Memcache. Se attualmente utilizzi la libreria client di DB precedente, leggi la guida alla migrazione da DB a NDB
Le funzioni descritte in questa pagina sono definite nel pacchetto google.appengine.ext.db
.
Funzioni
- allocate_ids (model, model)
-
Consente di allocare un batch di ID in Datastore per un tipo di Datastore e una combinazione padre.
Gli ID allocati in questo modo non verranno utilizzati dal generatore automatico di sequenze di ID di Datastore e potranno essere utilizzati nelle chiavi di entità senza conflitti.
Argomenti
- model
- La chiave del modello per cui allocare un batch di ID. Si tratta di una chiave normale, ma solo il padre e il tipo di chiave sono necessari per determinare quale sequenza ID utilizzare.
- 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, otterrai un reso nel formato (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 (model, count)
-
Alloca in modo asincrono un batch di ID in Datastore per un tipo di Datastore e una combinazione padre.
Questa funzione è identica a
allocate_ids()
, ad eccezione del fatto che restituisce un oggetto asincrono. Puoi chiamareget_result()
sul valore restituito per bloccare durante la chiamata e restituire il risultato.Argomenti
- model
- Un'istanza, una chiave o una stringa
db.Model
da utilizzare come modello che specifica la sequenza di ID in cui allocare gli ID. Gli ID restituiti devono essere utilizzati solo in entità con lo stesso elemento padre (se presente) e tipo di 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, otterrai un valore restituito nel formato (1, 10), non un elenco completo degli ID creati.
- allocate_id_range (model, start, end, **kwargs)
-
Consente di allocare un intervallo di ID con endpoint specifici. Una volta assegnati questi ID, puoi assegnarli manualmente alle entità appena create.
L'allocatore automatico di ID di Datastore non assegna mai una chiave già allocata (tramite l'allocazione automatica degli ID o una chiamata esplicita "allocate_ids"). Di conseguenza, le entità scritte nell'intervallo di chiavi specificato non verranno mai sovrascritte. Tuttavia, la scrittura di entità con chiavi assegnate manualmente in questo intervallo potrebbe 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 di ID numerico esistente che vuoi prenotare (ad esempio, il caricamento collettivo di entità che hanno già ID). Se non ti interessa quali ID ricevi, usa invece
allocate_ids()
.Argomenti
- model
- Un'istanza, una chiave o una stringa
db.Model
da utilizzare come modello che specifica la sequenza di ID in cui allocare gli ID. Gli ID restituiti devono essere utilizzati solo in entità con lo stesso elemento padre (se presente) e tipo di 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
,KEY_RANGE_COLLISION
). In caso contrario,KEY_RANGE_EMPTY
, rappresenta un potenziale problema relativo all'utilizzo dell'intervallo di chiavi allocato. - create_transaction_options (**kwargs)
-
Crea un oggetto delle opzioni di transazione (classe
TransactionOptions
) per controllare l'esecuzione della transazione. Passi l'oggetto risultante come primo argomento alla funzionerun_in_transaction_options()
.Argomenti
- propagation
- 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, aggiungi un'eccezione
BadRequestError
.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 tra gruppi (XG). Aumenta un'eccezioneBadArgumentError
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 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 transazione cross-group (XG) successiva:
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)
- delete (modelli, scadenza=60)
-
Elimina una o più istanze del modello da Datastore.
Argomenti
- modelli
- Un'istanza del modello, una chiave di entità o un elenco (o altro iterabile) di istanze del modello o chiavi di entità da eliminare.
- scadenza
- Tempo massimo, in secondi, di attesa che Datastore restituisca un risultato prima di interrompere con un errore. Accetta un valore intero o 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 per
put()
, se vengono assegnate più chiavi, queste potrebbero essere incluse in più di un gruppo di entità.Verrà sempre generata un'eccezione se si verifica un errore durante l'operazione, anche se alcune entità sono state effettivamente eliminate. Se la chiamata viene restituita senza generare un'eccezione, tutte le entità sono state eliminate correttamente.
Attenzione: l'eliminazione di più entità in una singola operazione non garantisce che le eliminazioni vengano eseguite a livello atomico, a meno che l'operazione non venga eseguita all'interno di una transazione. Altri processi che eseguono query su Datastore potrebbero vedere risultati incoerenti anche se la query viene eseguita con elevata coerenza.
- delete_async (modelli, deadline=60)
-
Elimina in modo asincrono una o più istanze del modello da Datastore.
Questa funzione è identica a
delete()
, ad eccezione del fatto che restituisce un oggetto asincrono. Puoi chiamareget_result()
sul valore restituito per bloccarlo durante la chiamata.Argomenti
- modelli
- Un'istanza del modello, una chiave di entità o un elenco (o altro iterabile) di istanze del modello o chiavi di entità da eliminare.
- scadenza
- Tempo massimo, in secondi, di attesa che Datastore restituisca un risultato prima di interrompere con un errore. Accetta un valore intero o 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 per
put()
, se vengono assegnate più chiavi, queste potrebbero essere incluse in più di un gruppo di entità.Questa funzione restituisce un oggetto che consente di bloccare il risultato della chiamata.
Verrà sempre generata un'eccezione se si verifica un errore durante l'operazione, anche se alcune entità sono state effettivamente eliminate. Se la chiamata viene restituita senza generare un'eccezione, tutte le entità sono state eliminate correttamente.
Attenzione: l'eliminazione di più entità in una singola operazione non garantisce che le eliminazioni vengano eseguite a livello atomico, a meno che l'operazione non venga eseguita all'interno di una transazione. Altri processi che eseguono query su Datastore potrebbero vedere risultati incoerenti anche se la query viene eseguita con elevata coerenza.
- get (chiavi, read_policy=STRONG_CONSISTENCY, deadline=STRONG_CONSISTENCY)
-
Recupera le istanze specifiche del modello con le chiavi specificate da Datastore.
Argomenti
- tasti
- Chiave dell'entità da recuperare, una rappresentazione stringa della chiave, un elenco di chiavi o le 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 un singolo gruppo di entità.
- EVENTUAL_CONSISTENCY
- Può comprendere più gruppi di entità, ma a volte restituisce risultati inattivi. In generale, le query a coerenza finale vengono eseguite più velocemente rispetto a quelle 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 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
è costituito da una singola chiave (o dalla sua rappresentazione di stringa), questa funzione restituisce l'istanza del modello associata alla chiave se quest'ultima esiste nel Datastore, altrimentiNone
. Sekeys
è un elenco, il valore restituito è un elenco corrispondente di istanze del modello, con valoriNone
in cui non esiste alcuna entità per una determinata chiave.Vedi anche
Model.get()
. - get_async (chiavi, read_policy=STRONG_CONSISTENCY, deadline=STRONG_CONSISTENCY)
-
Recupera in modo asincrono le istanze del modello specificate da Datastore.
Questa funzione è identica a
get()
, ad eccezione del fatto che restituisce un oggetto asincrono. Puoi chiamareget_result()
sul valore restituito per bloccare la chiamata e ottenere i risultati.Argomenti
- tasti
- Chiave dell'entità da recuperare, una rappresentazione stringa della chiave, un elenco di chiavi o le 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 un singolo gruppo di entità.
- EVENTUAL_CONSISTENCY
- Può comprendere più gruppi di entità, ma a volte restituisce risultati inattivi. In generale, le query a coerenza finale vengono eseguite più velocemente rispetto a quelle 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 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
è costituito da una singola chiave (o dalla sua rappresentazione di stringa), questa funzione restituisce l'istanza del modello associata alla chiave se quest'ultima esiste nel Datastore, altrimentiNone
. Sekeys
è un elenco, il valore restituito è un elenco corrispondente di istanze del modello, con valoriNone
in cui non esiste alcuna entità per una determinata chiave.Vedi anche
Model.get()
. - get_indexes ()
-
Restituisce un elenco di indici composti appartenenti all'applicazione chiamante.
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 all'applicazione chiamante.
- 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'istanza
Model
. Un buffer di protocollo è il formato di serializzazione di Google utilizzato per le chiamate di procedure remote e può essere utile per serializzare gli oggetti Datastore a scopo di backup e ripristino.Attenzione:questa funzione utilizza un formato diverso (precedente) per i buffer di protocollo rispetto al formato del buffer di 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 stringa di byte.
- model_from_protobuf (pb)
-
Crea un'istanza
Model
basata su una serializzazione del buffer di protocollo. Consultamodel_to_protobuf()
per ulteriori informazioni.Argomento
- pb
- La serializzazione del buffer di protocollo, come restituita da
model_to_protobuf()
.
Restituisce un oggetto della classe kind appropriata. Se la classe kind non esiste, genera un'eccezione
KindError
. Se l'oggetto non è valido secondo il modello, genera un'eccezioneBadValueError
.Puoi salvare il nuovo oggetto in Datastore come qualsiasi altra istanza
Model
, ad esempio chiamando il relativo metodoput()
. L'oggetto conserva la chiave che aveva al momento della creazione del buffer di protocollo. Se un oggetto con questa chiave esiste già in Datastore, il salvataggio dell'oggetto deserializzato sovrascrive l'oggetto esistente.Attenzione:se la chiave dell'oggetto utilizza un ID assegnato dal sistema e questo ID non è già stato allocato per il percorso e il tipo specificati, il salvataggio avrà esito positivo, ma l'ID non è riservato. Questo ID può essere assegnato a un oggetto creato in futuro, che andrebbe a sovrascrivere l'oggetto precedente. Per motivi di sicurezza, ripristina gli oggetti solo nella stessa applicazione in cui erano presenti al momento della serializzazione.
- model_is_projection (model_instance)
-
Restituisce
True
se la query specificata (model_instance
) è una 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 query di proiezione.
Restituisce
True
se la query è una query di proiezione,False
in caso contrario. - put (modelli, deadline=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 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 specificate più istanze del modello, queste potrebbero trovarsi in più di un gruppo di entità.
Verrà sempre sollevata un'eccezione se si verifica un errore durante l'operazione, anche se alcune delle entità sono state effettivamente scritte. Se la chiamata restituisce senza generare un'eccezione, tutte le entità sono state scritte correttamente.
Se
models
è costituito da una singola istanza del modello, questa funzione restituisce l'oggetto Key corrispondente. Semodels
è un elenco, il valore restituito è un elenco di oggetti Key corrispondenti.Attenzione: la scrittura di più entità in una singola operazione non garantisce che le scritture vengano eseguite a livello atomico, a meno che non venga eseguita all'interno di una transazione. Altri processi che eseguono query su Datastore potrebbero vedere risultati incoerenti anche se la query viene eseguita con elevata coerenza.
- put_async (modelli, deadline=60)
-
Scrive una o più istanze del modello in Datastore.
Questa funzione è identica a
put()
, ad eccezione del fatto che 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 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 specificate più istanze del modello, queste potrebbero trovarsi in più di un gruppo di entità.
Verrà sempre sollevata un'eccezione se si verifica un errore durante l'operazione, anche se alcune delle entità sono state effettivamente scritte. Se la chiamata restituisce senza generare un'eccezione, tutte le entità sono state scritte correttamente.
Questa funzione restituisce un oggetto asincrono su cui è possibile chiamare
get_result()
. I risultati restituiti sono gli stessi diput()
.Attenzione: la scrittura di più entità in una singola operazione non garantisce che le scritture vengano eseguite a livello atomico, a meno che non venga eseguita all'interno di una transazione. Altri processi che eseguono query su Datastore potrebbero vedere risultati incoerenti anche se 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 (function, *args, **kwargs)
-
Esegue una funzione contenente gli aggiornamenti di Datastore in una singola transazione. Se un codice genera un'eccezione durante la transazione, viene eseguito il rollback di tutti gli aggiornamenti apportati alla transazione. In alternativa, puoi utilizzare il decorator
@db.transactional()
.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 questo valore al chiamante.Se la funzione genera un'eccezione, viene eseguito il rollback della transazione. Se l'eccezione è un'eccezione
Rollback
, non viene inviata nuovamente; qualsiasi altra eccezione viene inviata nuovamente al 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 la 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 una singola transazione, la funzione non dovrebbe avere effetti collaterali, incluse le modifiche agli argomenti.Se non è possibile eseguire il commit della transazione, ad esempio a causa di un alto tasso di conflitto, viene rilevata un'eccezione
TransactionFailedError
.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 (retries, function, *args, **kwargs)
-
Esegue una funzione contenente gli aggiornamenti di Datastore in una singola transazione, riprovando la transazione un numero specificato di volte in caso di contesa. Se un codice genera un'eccezione durante la transazione, viene eseguito il rollback di tutti gli aggiornamenti apportati alla transazione.
Oltre alla possibilità di specificare il numero di nuovi tentativi, questa funzione si comporta in modo identico a
run_in_transaction()
.Argomenti
- nuovi tentativi
- Numero massimo di volte in cui è possibile chiamare la funzione in caso di conflitto all'interno del gruppo di entità (più di un utente 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 (options, function, *args, **kwargs)
-
Esegue una funzione contenente gli aggiornamenti di Datastore in una singola transazione utilizzando le opzioni specificate in un oggetto delle opzioni di transazione. Se un codice genera un'eccezione durante la transazione, viene eseguito il rollback di tutti gli aggiornamenti di Datastore effettuati nella transazione.
Per le transazioni cross-group (XG), il parametro
xg
nell'oggetto delle opzioni di transazione deve essere impostato suTrue
.Argomenti
- opzioni
- L'oggetto delle opzioni della transazione che contiene le impostazioni utilizzate dalla transazione. Per abilitare le transazioni XG, il 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 questo valore al chiamante.Se la funzione genera un'eccezione, viene eseguito il rollback della transazione. Se l'eccezione è un'eccezione
Rollback
, non viene inviata nuovamente; qualsiasi altra eccezione viene inviata nuovamente al 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, riprovando la transazione fino al numero di nuovi tentativi specificato nell'oggetto delle opzioni di transazione. Poiché la funzione di transazione può essere chiamata più di una volta per una singola transazione, non dovrebbe avere effetti collaterali, tra cui le modifiche agli argomenti.Se non è possibile eseguire il commit della transazione, ad esempio a causa di un alto tasso di conflitto, viene rilevata un'eccezione
TransactionFailedError
.L'esempio seguente mostra come utilizzare questa funzione per eseguire una 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, model_instance=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. I valori del modello sovrascrivono i valori nel dizionario; le voci del dizionario non corrispondenti ai campi nell'istanza del modello vengono conservate.
Decoratori
- @db.transactional (propagation=ALLOWED, xg=False, retries=3, deadline=60)
-
Consente di eseguire una funzione all'interno di una transazione
db
. Di conseguenza, invece di chiamarerun_in_transaction(func)
, puoi chiamarefunc()
.Argomenti
- propagation
- 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, aggiungi un'eccezione
BadRequestError
.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 tra gruppi (XG). Aumenta un'eccezioneBadArgumentError
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 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 chiamata dall'interno di una transazione.Argomento
- allow_existing
- Se
True
, consenti alla funzione di essere chiamata dall'interno di una transazione esistente; seFalse
, genera invece un'eccezioneBadRequestError
.