Funzioni di Datastore

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 tramite Google Cloud CLI o tramite l'API Compute Engine. Se al momento utilizzi la libreria client DB precedente, leggi il Guida alla migrazione da DB a NDB

Le funzioni descritte in questa pagina sono definite nel google.appengine.ext.db package.

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 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 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 degli ID primo e ultimo allocati. Ad esempio, se hai allocato 10 ID utilizzando questa funzione, riceverai 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 in Datastore per un Datastore di tipo e padre.

Questa funzione è identica a allocate_ids() tranne per il fatto che restituisce un oggetto asincrono. Puoi chiamare get_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 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, otterresti un valore restituito il 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 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 un determinato intervallo di chiavi non verrà mai sovrascritto. Tuttavia, scrivere 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 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
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 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 e KEY_RANGE_COLLISION). In caso contrario KEY_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 argomento run_in_transaction_options() personalizzata.

Argomenti

propagazione
Cosa fare se questa funzione transazionale viene chiamata all'interno di 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 rilevare l'eccezione ed eseguire il commit della transazione esterna. è possibile che la funzione abbia 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. è possibile che la funzione abbia 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 transazione esistente.
xg
Se True, consenti transazioni cross-group (XG). Genera un'eccezione BadArgumentError se impostato su un valore non booleano.
nuovi tentativi
Numero di nuovi tentativi da effettuare in caso di fallimento dell'commit della transazione.
deadline
Tempo massimo, in secondi, di attesa che Datastore restituisca un risultato prima di interrompere 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 a eseguire l'operazione, provare un'operazione diversa o aggiungerla 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)
elimina (modelli, scadenza=60)

Consente di eliminare una o più istanze del modello dal Datastore.

Argomenti

modelli
Un'istanza del modello, chiave entità, o un elenco (o altro iterabile) di istanze di modelli o chiavi di entità eliminare.
deadline
Tempo massimo, in secondi, di attesa che Datastore restituisca un risultato prima di interrompere 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 a eseguire l'operazione, provare un'operazione diversa o aggiungerla 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 i resi senza generare un'eccezione, tutte le entità sono state eliminate correttamente.

Attenzione: quando elimini più entità in un oggetto 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 mostrare risultati incoerenti anche quando la query viene eseguita con una forte coerenza.

delete_async (models, deadline=60)

Elimina in modo asincrono una o più istanze del modello Datastore.

Questa funzione è identica a delete() tranne per il fatto che restituisce un oggetto asincrono. Puoi chiamare get_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.
scadenza
Tempo massimo, in secondi, di attesa che Datastore restituisca un risultato prima di interrompere 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 con put(), se vengono assegnate più chiavi, potrebbero trovarsi in più chiavi gruppo di entità.

Questa funzione restituisce un oggetto che ti 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 restituisce senza sollevare un'eccezione, significa che tutte le entità sono state eliminate correttamente.

Attenzione: quando elimini più entità in un oggetto 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.

get (keys, read_policy=STRONG_CONSISTENCY, deadline=60)

Recupera le istanze di modello specifiche con le chiavi specificate dal Datastore.

Argomenti

keys
Chiave di entità da recuperare, una rappresentazione stringa della chiave o un elenco di chiavi o 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 una singola gruppo di entità.
EVENTUAL_CONSISTENCY
Può abbracciare più gruppi di entità, ma occasionalmente può ritornare i 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 che Datastore restituisca un risultato prima di interrompere 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 a eseguire l'operazione, provare un'operazione diversa o aggiungerla 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, altrimenti None. Se keys è un elenco, il valore restituito è un elenco corrispondente di istanze del modello, con valori None 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() ma restituisce un oggetto asincrono. Puoi chiamare get_result() sul valore restituito per bloccare la chiamata e ottenere i risultati.

Argomenti

keys
Chiave di entità da recuperare, una rappresentazione stringa della chiave o un elenco di chiavi o 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ò abbracciare più gruppi di entità, ma occasionalmente può ritornare i 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 che Datastore restituisca un risultato prima di interrompere 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 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 in None. Se keys è un elenco, il valore restituito è un elenco corrispondente di istanze del modello, con valori None in cui non esiste un'entità per una determinata 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 chiamate di procedure remote e può essere utile per serializzare gli oggetti Datastore a scopo 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 di una sottoclasse) da serializzare.

Restituisce la serializzazione del buffer di protocollo dell'oggetto, come byte stringa.

model_from_protobuf (pb)

Crea un'istanza Model in base alla serializzazione di un buffer di protocollo. Per ulteriori informazioni, consulta model_to_protobuf().

Argomento

pb
La serializzazione del buffer di protocollo, come restituita model_to_protobuf().

Restituisce un oggetto della classe di tipo appropriata. Se la classe kind inesistente, genera KindError un'eccezione. Se l'oggetto non è valido in base al modello, viene sollevata un'eccezione BadValueError.

Puoi salvare il nuovo oggetto in Datastore come qualsiasi altro oggetto Model, ad esempio chiamando la relativa put() . 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 nel 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 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 il anche se alcune 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 l'oggetto corrispondente Key. Se models è un elenco, il valore restituito è un elenco di corrispondente Chiave di oggetti strutturati.

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 su Datastore potrebbero mostrare risultati incoerenti anche quando la query viene eseguita con una forte coerenza.

put_async (models, deadline=60)

Scrive una o più istanze del modello in Datastore.

Questa funzione è identica a put() tranne per il fatto che restituisce un oggetto asincrono. Puoi chiamare get_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 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 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 una gruppo di entità.

Verrà sempre sollevata un'eccezione se si verifica un errore durante il anche se alcune 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 è possibile chiamare get_result(). I risultati restituiti sono gli stessi di quelli per put().

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 su Datastore potrebbero mostrare risultati incoerenti anche quando la query viene eseguita con una forte 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

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 al 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 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 tentativi, utilizza run_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 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 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.

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 chiamare la funzione in caso di competizione all'interno del gruppo di entità (più utenti che tentano 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 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 transazioni cross-group (XG), È necessario impostare il parametro xg nell'oggetto delle opzioni di transazione a True.

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.
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 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 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 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=None)

Crea e restituisce una rappresentazione di 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 (propagazione=ALLOWED, xg=Falso, retries=3, scadenza=60)

Consente di eseguire una funzione all'interno di una transazione db. Pertanto, invece di chiamare run_in_transaction(func), puoi chiamare func().

Argomenti

propagazione
Cosa fare se questa funzione transazionale viene chiamata all'interno di 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 rilevare l'eccezione ed eseguire il commit della transazione esterna. è possibile che la funzione abbia 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 rilevare l'eccezione ed eseguire il commit della transazione esterna. è possibile che la funzione abbia 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 transazione esistente.
xg
Se True, consenti le transazioni tra gruppi (XG). Genera un'eccezione BadArgumentError 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 dall'interno di un transazione esistente; se False, lancia un BadRequestError un'eccezione.