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, ad esempio la memorizzazione nella cache automatica delle entità tramite l'API Memcache. Se al momento utilizzi la libreria client 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, count)
-
Alloca un batch di ID nel datastore per una combinazione di tipo e entità principale del datastore.
Gli ID allocati in questo modo non verranno utilizzati dal generatore di sequenze di ID automatico di Datastore e possono essere utilizzati nelle chiavi dell'entità senza conflitti.
Argomenti
- model
- La chiave del modello per cui allocare un batch di ID. Si tratta di una normale chiave, ma per determinare quale sequenza di ID utilizzare sono necessari solo il valore principale e il tipo della chiave.
- count
- Il numero di ID da allocare.
Restituisce una tupla degli ID primo e ultimo 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.
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 nel datastore per una combinazione di tipo e entità principale del datastore.
Questa funzione è identica a
allocate_ids()
tranne per il fatto che restituisce un oggetto asincrono. Puoi chiamareget_result()
sul valore restituito per bloccare la chiamata e restituire il risultato.Argomenti
- model
- Un
db.Model
oggetto, chiave o stringa da utilizzare come modello per specificare la sequenza di ID in cui allocare gli ID. Gli ID restituiti devono essere utilizzati solo nelle entità con lo stesso parente (se presente) e lo stesso tipo di questa chiave. - count
- Il numero di ID da allocare.
Restituisce una tupla degli ID primo e ultimo 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)
-
Alloca un intervallo di ID con endpoint specifici. Una volta assegnati questi ID, puoi assegnarli manualmente alle entità appena create.
L'allocatore di ID automatico di Datastore non assegna mai una chiave che è stata già allocata (tramite l'allocazione automatica degli ID o tramite 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 le entità esistenti (o le nuove entità scritte da una richiesta separata), a seconda dello stato dell'intervallo di chiavi restituito.
Utilizza questa funzione solo se hai già un intervallo di ID numerici che vuoi prenotare (ad esempio, entità di caricamento collettivo che hanno già ID). Se non ti interessano gli ID che ricevi, utilizza
allocate_ids()
.Argomenti
- model
- Un
db.Model
oggetto, chiave o stringa da utilizzare come modello per specificare la sequenza di ID in cui allocare gli ID. Gli ID restituiti devono essere utilizzati solo nelle entità con lo stesso parente (se presente) e lo stesso tipo di questa chiave. - start
- Il primo ID da allocare, un numero.
- end
- L'ultimo ID da allocare, un numero.
Restituisce uno dei valori (
KEY_RANGE_EMPTY
,KEY_RANGE_CONTENTION
,KEY_RANGE_COLLISION
). Se non èKEY_RANGE_EMPTY
, si tratta di un potenziale problema con l'utilizzo dell'intervallo di chiavi allocato. - create_transaction_options (**kwargs)
-
Crea un oggetto opzioni di transazione (classe
TransactionOptions
) per controllare l'esecuzione delle transazioni. Devi passare l'oggetto risultante come primo argomento alla funzionerun_in_transaction_options()
.Argomenti
- propagazione
- Cosa fare se questa funzione di transazione viene chiamata da un'altra transazione:
- CONSENTITO
- Se hai già avviato una transazione, continua a utilizzarla; in caso contrario, avviane una.
Nota:se una funzione che utilizza questo criterio genera un'eccezione, probabilmente non è sicuro intercettare l'eccezione e eseguire l'commit della transazione esterna; la funzione potrebbe aver lasciato la transazione esterna in uno stato non valido.
- OBBLIGATORIO
- Continua nella transazione esistente, se esistente; in caso contrario, lancia un'eccezione
BadRequestError
.Nota:se una funzione che utilizza questo criterio genera un'eccezione, probabilmente non è sicuro intercettare l'eccezione e eseguire l'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 a livello di transazione con la transazione esterna.
- NESTED
- (Non ancora supportato) Crea una transazione nidificata all'interno di una esistente.
- xg
- Se
True
, consenti le transazioni tra gruppi (XG). Genera un'eccezioneBadArgumentError
se impostato su un valore non booleano. - riprova
- Numero di nuovi tentativi da effettuare in caso di fallimento dell'commit della transazione.
- deadline
- Tempo massimo, in secondi, di attesa per il ritorno di un risultato da parte di Datastore prima dell'interruzione con un errore. Accetta un valore intero o con 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 l'operazione, provare un'altra operazione o aggiungere l'operazione a una coda di attività).
L'esempio seguente crea le opzioni per una transazione tra gruppi (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 (models, deadline=60)
-
Consente di eliminare una o più istanze del modello dal Datastore.
Argomenti
- modelli
- Un'istanza di modello, una chiave dell'entità, oppure un elenco (o un altro elemento iterabile) di istanze di modello o chiavi dell'entità da eliminare.
- deadline
- Tempo massimo, in secondi, di attesa per il ritorno di un risultato da parte di Datastore prima dell'interruzione con un errore. Accetta un valore intero o con 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 l'operazione, provare un'altra operazione o aggiungere l'operazione a una coda di attività).
Come per
put()
, se vengono fornite più chiavi, queste possono 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 eliminate. Se la chiamata restituisce senza sollevare un'eccezione, significa che tutte le entità sono state eliminate correttamente.
Attenzione: l'eliminazione di più entità in un'unica operazione non garantisce che le eliminazioni avvengano in modo atomico, a meno che l'operazione non venga eseguita all'interno di una transazione. Altri processi che eseguono query sul Datastore potrebbero mostrare risultati incoerenti anche quando la query viene eseguita con una elevata coerenza.
- delete_async (models, deadline=60)
-
Elimina in modo asincrono una o più istanze del modello dal Datastore.
Questa funzione è identica a
delete()
tranne per il fatto che restituisce un oggetto asincrono. Puoi chiamareget_result()
sul valore restituito per bloccare la chiamata.Argomenti
- modelli
- Un'istanza di modello, una chiave dell'entità, oppure un elenco (o un altro elemento iterabile) di istanze di modello o chiavi dell'entità da eliminare.
- deadline
- Tempo massimo, in secondi, di attesa per il ritorno di un risultato da parte di Datastore prima dell'interruzione con un errore. Accetta un valore intero o con 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 l'operazione, provare un'altra operazione o aggiungere l'operazione a una coda di attività).
Come per
put()
, se vengono fornite più chiavi, queste possono trovarsi in più di un gruppo di entità.Questa funzione restituisce un oggetto che ti consente di bloccare il risultato della chiamata.
Verrà sempre sollevata un'eccezione se si verifica un errore durante l'operazione, anche se alcune delle entità sono state effettivamente eliminate. Se la chiamata restituisce senza sollevare un'eccezione, significa che tutte le entità sono state eliminate correttamente.
Attenzione: l'eliminazione di più entità in un'unica operazione non garantisce che le eliminazioni avvengano in modo atomico, a meno che l'operazione non venga eseguita all'interno di una transazione. Altri processi che eseguono query sul Datastore potrebbero mostrare risultati incoerenti anche quando la query viene eseguita con una elevata coerenza.
- get (keys, read_policy=STRONG_CONSISTENCY, deadline=60)
-
Recupera le istanze Model specifiche con le chiavi specificate da Datastore.
Argomenti
- keys
- Chiave dell'entità da recuperare, una rappresentazione di stringa della chiave o un elenco di chiavi o delle relative rappresentazioni di stringa.
- read_policy
- Leggi le norme che specificano il livello di coerenza dei dati desiderato:
- STRONG_CONSISTENCY
- Garantisce i risultati più recenti, ma limitati a un singolo gruppo di entità.
- EVENTUAL_CONSISTENCY
- Può includere più gruppi di entità, ma a volte può restituire risultati obsoleti. In genere, le query eventualmente coerenti vengono eseguite più velocemente delle query fortemente coerenti, ma non c'è alcuna garanzia.
Nota:le query globali (non antecedenti) ignorano questo argomento.
- deadline
- Tempo massimo, in secondi, di attesa per il ritorno di un risultato da parte di Datastore prima dell'interruzione con un errore. Accetta un valore intero o con 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 l'operazione, provare un'altra operazione o aggiungere l'operazione a una coda di attività).
Se
keys
è costituito da una singola chiave (o dalla relativa rappresentazione di stringa), questa funzione restituisce l'istanza del modello associata alla chiave se la chiave esiste in Datastore, altrimentiNone
. Sekeys
è un elenco, il valore restituito è un elenco corrispondente di istanze del modello, con valoriNone
in cui non esiste un'entità per una determinata chiave.Vedi anche
Model.get()
. - get_async (keys, read_policy=STRONG_CONSISTENCY, deadline=60)
-
Recupera in modo asincrono le istanze del modello specificate dal Datastore.
Questa funzione è identica a
get()
tranne per il fatto che restituisce un oggetto asincrono. Puoi chiamareget_result()
sul valore restituito per bloccare la chiamata e ottenere i risultati.Argomenti
- keys
- Chiave dell'entità da recuperare, una rappresentazione di stringa della chiave o un elenco di chiavi o delle relative rappresentazioni di stringa.
- read_policy
- Leggi le norme che specificano il livello di coerenza dei dati desiderato:
- STRONG_CONSISTENCY
- Garantisce i risultati più recenti, ma limitati a un singolo gruppo di entità.
- EVENTUAL_CONSISTENCY
- Può includere più gruppi di entità, ma a volte può restituire risultati obsoleti. In genere, le query eventualmente coerenti vengono eseguite più velocemente delle query fortemente coerenti, ma non c'è alcuna garanzia.
Nota:le query globali (non antecedenti) ignorano questo argomento.
- deadline
- Tempo massimo, in secondi, di attesa per il ritorno di un risultato da parte di Datastore prima dell'interruzione con un errore. Accetta un valore intero o con 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 l'operazione, provare un'altra operazione o aggiungere l'operazione a una coda di attività).
Se
keys
è costituito da una singola chiave (o dalla relativa rappresentazione di stringa), questa funzione restituisce l'istanza del modello associata alla chiave se la chiave esiste in Datastore, altrimentiNone
. Sekeys
è un elenco, il valore restituito è un elenco corrispondente di istanze del modello, con valoriNone
in cui non esiste un'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 del 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 (più vecchio) diverso 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 di una sottoclasse) da serializzare.
Restituisce la serializzazione del protocollo dell'oggetto come stringa di byte.
- model_from_protobuf (pb)
-
Crea un'istanza
Model
in base alla serializzazione di un buffer di protocollo. Per ulteriori informazioni, consultamodel_to_protobuf()
.Argomento
- pb
- La serializzazione del buffer del protocollo, restituita da
model_to_protobuf()
.
Restituisce un oggetto della classe di tipo appropriata. Se la classe di tipo non esiste, viene generata un'eccezione
KindError
. Se l'oggetto non è valido in base al modello, viene sollevata un'eccezioneBadValueError
.Puoi salvare il nuovo oggetto in Datastore come qualsiasi altra istanza
Model
, ad esempio chiamando il relativo metodoput()
. L'oggetto mantiene la chiave che aveva al momento della creazione del buffer del protocollo. Se in Datastore esiste già un oggetto con questa chiave, il salvataggio dell'oggetto deserializzato sovrascrive quello 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 andrà a buon fine, ma l'ID non è riservato. A un oggetto creato in futuro potrebbe essere assegnato questo ID, che sovrascriverebbe l'oggetto precedente. Per motivi di sicurezza, ripristina gli oggetti solo nella stessa applicazione in cui esistevano 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 stabilire se si tratta di una query di proiezione.
Restituisce
True
se la query è una query di proiezione,False
in caso contrario. - put (models, deadline=60)
-
Scrive una o più istanze del modello nel Datastore.
Argomenti
- modelli
- Un'istanza del modello o un elenco di istanze del modello da memorizzare.
- deadline
- Tempo massimo, in secondi, di attesa per il ritorno di un risultato da parte di Datastore prima dell'interruzione con un errore. Accetta un valore intero o con 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 l'operazione, provare un'altra operazione o aggiungere l'operazione a una coda di attività).
Se vengono fornite più istanze del modello, queste possono 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 sollevare un'eccezione, significa che tutte le entità sono state scritte correttamente.
Se
models
è costituito da una singola istanza del modello, questa funzione restituisce l'oggetto corrispondente Key. 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 in modo atomico, a meno che l'operazione non venga eseguita all'interno di una transazione. Altri processi che eseguono query sul Datastore potrebbero mostrare risultati incoerenti anche quando la query viene eseguita con una elevata coerenza.
- put_async (models, deadline=60)
-
Scrive una o più istanze del modello nel Datastore.
Questa funzione è identica a
put()
tranne per il 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 del modello da memorizzare.
- deadline
- Tempo massimo, in secondi, di attesa per il ritorno di un risultato da parte di Datastore prima dell'interruzione con un errore. Accetta un valore intero o con 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 l'operazione, provare un'altra operazione o aggiungere l'operazione a una coda di attività).
Se vengono fornite più istanze del modello, queste possono 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 sollevare un'eccezione, significa che 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 di quelli perput()
.Attenzione: la scrittura di più entità in una singola operazione non garantisce che le scritture vengano eseguite in modo atomico, a meno che l'operazione non venga eseguita all'interno di una transazione. Altri processi che eseguono query sul Datastore potrebbero mostrare risultati incoerenti anche quando la query viene eseguita con una 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 aggiornamenti di Datastore in un'unica transazione. Se un codice genera un'eccezione durante la transazione, tutti gli aggiornamenti apportati vengono annullati. In alternativa, puoi utilizzare il decoratore
@db.transactional()
.Argomenti
- function
- 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 all'autore della chiamata.Se la funzione genera un'eccezione, viene eseguito il rollback della transazione. Se l'eccezione è un'eccezione
Rollback
non viene sollevata di nuovo; qualsiasi altra eccezione viene sollevata di nuovo per il chiamante.Datastore utilizza il blocco ottimistico e i tentativi di nuovo invio per le transazioni. Se la transazione preparata dalla funzione non può essere confermata,
run_in_transaction()
richiama di nuovo la funzione, riprova la transazione fino a 3 volte. (Per utilizzare un numero diverso di 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 deve avere effetti collaterali, incluse le modifiche agli argomenti.Se la transazione non può essere confermata, ad esempio a causa di un tasso elevato di competizione, viene sollevata 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 aggiornamenti del datastore in una singola transazione, riprova la transazione un numero specificato di volte in caso di contesa. Se un codice genera un'eccezione durante la transazione, tutti gli aggiornamenti apportati nella transazione vengono annullati.
A parte la possibilità di specificare il numero di tentativi, questa funzione si comporta in modo identico a
run_in_transaction()
.Argomenti
- riprova
- Numero massimo di volte in cui chiamare la funzione in caso di competizione all'interno del gruppo di entità (più utenti che tentano di modificare il gruppo contemporaneamente).
- function
- 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 aggiornamenti di Datastore in una singola transazione utilizzando le opzioni specificate in un oggetto di opzioni di transazione. Se un codice genera un'eccezione durante la transazione, tutti gli aggiornamenti di Datastore apportati nella transazione vengono annullati.
Per le transazioni tra gruppi (XG), il parametro
xg
nell'oggetto opzioni di transazione deve essere impostato suTrue
.Argomenti
- opzioni
- L'oggetto opzioni transazione contenente le impostazioni utilizzate da questa
transazione. Per attivare le transazioni XG, il parametro xg deve essere impostato su
True
. - function
- 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 all'chiamante.Se la funzione genera un'eccezione, viene eseguito il rollback della transazione. Se l'eccezione è un'eccezione
Rollback
non viene sollevata di nuovo; qualsiasi altra eccezione viene sollevata di nuovo per il chiamante.Datastore utilizza il blocco ottimistico e i tentativi di nuovo invio per le transazioni. Se la transazione preparata dalla funzione non può essere confermata,
run_in_transaction_options()
richiama di nuovo la funzione, riprova la transazione fino al numero di tentativi specificato nell'oggetto opzioni della 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 la transazione non può essere confermata, ad esempio a causa di un tasso elevato di competizione, viene sollevata 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, dictionary=None)
-
Crea e restituisce una rappresentazione di dizionario di un'istanza del modello.
Argomenti
- model_instance
- Istanzia del modello da copiare.
- dictionary
- 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
. Pertanto, invece di chiamarerun_in_transaction(func)
, puoi chiamarefunc()
.Argomenti
- propagazione
- Cosa fare se questa funzione di transazione viene chiamata da un'altra transazione:
- CONSENTITO
- Se hai già avviato una transazione, continua a utilizzarla; in caso contrario, avviane una.
Nota:se una funzione che utilizza questo criterio genera un'eccezione, probabilmente non è sicuro intercettare l'eccezione e eseguire l'commit della transazione esterna; la funzione potrebbe aver lasciato la transazione esterna in uno stato non valido.
- OBBLIGATORIO
- Continua nella transazione esistente, se esistente; in caso contrario, lancia un'eccezione
BadRequestError
.Nota:se una funzione che utilizza questo criterio genera un'eccezione, probabilmente non è sicuro intercettare l'eccezione e eseguire l'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 a livello di transazione con la transazione esterna.
- NESTED
- (Non ancora supportato) Crea una transazione nidificata all'interno di una esistente.
- xg
- Se
True
, consenti le transazioni tra gruppi (XG). Genera un'eccezioneBadArgumentError
se impostato su un valore non booleano. - riprova
- Numero di nuovi tentativi da effettuare in caso di fallimento dell'commit della transazione.
- deadline
- Tempo massimo, in secondi, di attesa per il ritorno di un risultato da parte di Datastore prima dell'interruzione con un errore. Accetta un valore intero o con 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 l'operazione, provare un'altra operazione o aggiungere l'operazione a una coda di attività).
- @db.non_transactional (allow_existing=True)
-
Garantisce che una funzione venga eseguita al di fuori di una transazione
db
, anche se chiamata all'interno di una transazione.Argomento
- allow_existing
- Se
True
, consenti di chiamare la funzione da una transazione esistente; seFalse
, lancia invece un'eccezioneBadRequestError
.