Funzioni di Datastore

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 nella cache automatica delle entità tramite l'API Memcache. Se attualmente utilizzi la libreria client DB precedente, leggi la Guida alla migrazione dal database 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 in Datastore per una combinazione di tipo Datastore e padre.

Gli ID allocati in questo modo non verranno utilizzati dal generatore di sequenze di ID automatici di Datastore e possono 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 sono necessari solo il tipo padre e il tipo di chiave per determinare quale sequenza ID utilizzare.
count
Il numero di ID da allocare.

Restituisce una tupla del primo e dell'ultimo ID che alloca. 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 una combinazione di tipo Datastore e padre.

Questa funzione è identica a allocate_ids(), ma restituisce un oggetto asincrono. Puoi chiamare get_result() sul valore restituito per bloccare la chiamata e restituire il risultato.

Argomenti

model
Un'istanza, una chiave o una stringa db.Model 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 padre (se presente) e lo stesso tipo di questa chiave.
count
Il numero di ID da allocare.

Restituisce una tupla del primo e dell'ultimo ID che alloca. 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 nuove entità create.

L'allocatore automatico di ID di Datastore non assegna mai una chiave già allocata (tramite allocazione automatica di ID o tramite una chiamata "allocate_ids" esplicita). 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 è già presente un intervallo di ID numerici che vuoi prenotare (ad esempio, entità di caricamento collettivo che hanno già ID). Se gli ID che ricevi non ti interessano, usa allocate_ids().

Argomenti

model
Un'istanza, una chiave o una stringa db.Model 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 padre (se presente) e lo stesso 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). Se non KEY_RANGE_EMPTY, rappresenta un potenziale problema relativo all'utilizzo dell'intervallo di chiavi allocato.

create_transaction_options (**kwargs)

Crea un oggetto Transaction options (classe TransactionOptions) per controllare l'esecuzione della transazione. L'oggetto risultante viene passato come primo argomento alla funzione run_in_transaction_options().

Argomenti

propagation
Cosa fare se questa funzione transazionale viene chiamata dall'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 individuare l'eccezione ed eseguire il commit della transazione esterna; la funzione potrebbe aver lasciato la transazione esterna in uno stato non valido.

OBBLIGATORIO
Continua nell'eventuale transazione esistente; in caso contrario, genera un'eccezione BadRequestError.

Nota:se una funzione che utilizza questo criterio genera un'eccezione, probabilmente non è sicuro individuare 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 quelle esistenti.

Nota:una funzione che utilizza questo criterio non deve restituire alcuna entità letta nella nuova transazione, poiché le entità non sono coerenti con la transazione esterna.

NESTATA
(Non ancora supportata) Crea una transazione nidificata all'interno di una esistente.
xg
Se True, consenti le transazioni cross-group (XG). Aumenta un'eccezione BadArgumentError se impostata 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 affinché Datastore restituisca un risultato prima di interrompere con un errore. Accetta un numero intero o un valore con virgola mobile. Non può essere impostato su un valore superiore al valore predefinito (60 secondi), ma può essere regolato 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, ritentare l'operazione, provare un'operazione diversa o aggiungere l'operazione a una coda di attività).

L'esempio seguente crea le opzioni per una successiva 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)
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 affinché Datastore restituisca un risultato prima di interrompere con un errore. Accetta un numero intero o un valore con virgola mobile. Non può essere impostato su un valore superiore al valore predefinito (60 secondi), ma può essere regolato 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, ritentare l'operazione, provare un'operazione diversa o aggiungere l'operazione a una coda di attività).

Come per put(), se vengono fornite più chiavi, queste potrebbero trovarsi in più di un gruppo di entità.

Verrà sempre generata un'eccezione se si verificano errori durante l'operazione, anche se alcune entità sono state effettivamente eliminate. Se la chiamata restituisce 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 avvengano a livello atomico, a meno che l'operazione non venga eseguita all'interno di una transazione. Gli 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 dal datastore.

Questa funzione è identica a delete(), ma restituisce un oggetto asincrono. Puoi richiamare get_result() sul valore restituito per bloccare 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 affinché Datastore restituisca un risultato prima di interrompere con un errore. Accetta un numero intero o un valore con virgola mobile. Non può essere impostato su un valore superiore al valore predefinito (60 secondi), ma può essere regolato 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, ritentare l'operazione, provare un'operazione diversa o aggiungere l'operazione a una coda di attività).

Come per put(), se vengono fornite più chiavi, queste potrebbero trovarsi in più di un gruppo di entità.

Questa funzione restituisce un oggetto che ti consente di bloccare in base al risultato della chiamata.

Verrà sempre generata un'eccezione se si verificano errori durante l'operazione, anche se alcune entità sono state effettivamente eliminate. Se la chiamata restituisce 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 avvengano a livello atomico, a meno che l'operazione non venga eseguita all'interno di una transazione. Gli altri processi che eseguono query su Datastore potrebbero vedere risultati incoerenti anche se la query viene eseguita con elevata coerenza.

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

Recupera le istanze del modello specifiche con le chiavi specificate da Datastore.

Argomenti

chiavi
Chiave dell'entità da recuperare, una rappresentazione stringa della chiave o un elenco di chiavi o delle 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ò includere più gruppi di entità, ma a volte può restituire risultati obsoleti. In generale, le query a coerenza finale vengono eseguite più velocemente delle query a coerenza elevata, ma non vi è alcuna garanzia.

Nota:le query globali (non predecessori) ignorano questo argomento.

scadenza
Tempo massimo, in secondi, di attesa affinché Datastore restituisca un risultato prima di interrompere con un errore. Accetta un numero intero o un valore con virgola mobile. Non può essere impostato su un valore superiore al valore predefinito (60 secondi), ma può essere regolato 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, ritentare l'operazione, provare un'operazione diversa o aggiungere l'operazione a una coda di attività).

Se keys è costituito da una singola chiave (o dalla sua rappresentazione stringa), questa funzione restituisce l'istanza del modello associata alla chiave se la chiave esiste nel datastore, altrimenti None. Se keys è un elenco, il valore restituito è un elenco corrispondente di istanze del modello, con valori None in cui non esiste alcuna entità per una determinata chiave.

Vedi anche Model.get().

get_async (keys, 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 chiamare get_result() sul valore restituito per bloccare la chiamata e ottenere i risultati.

Argomenti

chiavi
Chiave dell'entità da recuperare, una rappresentazione stringa della chiave o un elenco di chiavi o delle 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ò includere più gruppi di entità, ma a volte può restituire risultati obsoleti. In generale, le query a coerenza finale vengono eseguite più velocemente delle query a coerenza elevata, ma non vi è alcuna garanzia.

Nota:le query globali (non predecessori) ignorano questo argomento.

scadenza
Tempo massimo, in secondi, di attesa affinché Datastore restituisca un risultato prima di interrompere con un errore. Accetta un numero intero o un valore con virgola mobile. Non può essere impostato su un valore superiore al valore predefinito (60 secondi), ma può essere regolato 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, ritentare l'operazione, provare un'operazione diversa o aggiungere l'operazione a una coda di attività).

Se keys è costituito da una singola chiave (o dalla sua rappresentazione stringa), questa funzione restituisce l'istanza del modello associata alla chiave se la chiave esiste nel datastore, altrimenti None. Se keys è un elenco, il valore restituito è un elenco corrispondente di istanze del modello, con valori None 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 attuale è 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 di 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 del protocollo dell'oggetto, sotto forma di stringa di byte.

model_from_protobuf (pb)

Crea un'istanza Model basata sulla serializzazione di un buffer di protocollo. Consulta model_to_protobuf() per ulteriori informazioni.

Argomento

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

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

Puoi salvare il nuovo oggetto in Datastore come qualsiasi altra istanza Model, ad esempio chiamando il relativo metodo put(). L'oggetto conserva la chiave che aveva al momento della creazione del buffer di protocollo. Se in Datastore esiste già un oggetto con questa chiave, il salvataggio dell'oggetto deserializzato sovrascrive l'oggetto esistente.

Attenzione: se la chiave dell'oggetto utilizza un ID assegnato dal sistema e tale ID non è già stato allocato per il percorso e il tipo specificati, il salvataggio avrà esito positivo, ma l'ID non sarà 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 determinare se si tratta di una query di proiezione.

Restituisce True se la query è una query di proiezione, False in caso contrario.

put (modelli, scadenza=60)

Scrive una o più istanze di modello in Datastore.

Argomenti

modelli
Un'istanza del modello o un elenco di istanze del modello da archiviare.
scadenza
Tempo massimo, in secondi, di attesa affinché Datastore restituisca un risultato prima di interrompere con un errore. Accetta un numero intero o un valore con virgola mobile. Non può essere impostato su un valore superiore al valore predefinito (60 secondi), ma può essere regolato 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, ritentare l'operazione, provare un'operazione diversa o aggiungere l'operazione a una coda di attività).

Se vengono fornite più istanze del modello, potrebbero trovarsi in più di un gruppo di entità.

Verrà sempre generata un'eccezione in caso di errori durante l'operazione, anche se alcune 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. Se models è 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 avvengano a livello atomico, a meno che l'operazione non venga eseguita all'interno di una transazione. Gli altri processi che eseguono query su Datastore potrebbero vedere risultati incoerenti anche se la query viene eseguita con elevata coerenza.

put_async (modelli, scadenza=60)

Scrive una o più istanze di modello in Datastore.

Questa funzione è identica a put(), ma 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 del modello da archiviare.
scadenza
Tempo massimo, in secondi, di attesa affinché Datastore restituisca un risultato prima di interrompere con un errore. Accetta un numero intero o un valore con virgola mobile. Non può essere impostato su un valore superiore al valore predefinito (60 secondi), ma può essere regolato 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, ritentare l'operazione, provare un'operazione diversa o aggiungere l'operazione a una coda di attività).

Se vengono fornite più istanze del modello, potrebbero trovarsi in più di un gruppo di entità.

Verrà sempre generata un'eccezione in caso di errori durante l'operazione, anche se alcune 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 di put().

Attenzione: la scrittura di più entità in una singola operazione non garantisce che le scritture avvengano a livello atomico, a meno che l'operazione non venga eseguita all'interno di una transazione. Gli 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 che contiene gli aggiornamenti di Datastore in una singola transazione. Se qualsiasi codice genera un'eccezione durante la transazione, viene eseguito il rollback di tutti gli aggiornamenti apportati nella 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 il valore al chiamante.

Se la funzione genera un'eccezione, viene eseguito il rollback della transazione. Se l'eccezione è un'eccezione Rollback, non viene nuovamente sollevata; qualsiasi altra eccezione viene nuovamente sollevata 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() richiama la funzione di nuovo, ripetendo la transazione fino a tre volte. (Per utilizzare un numero diverso di nuovi tentativi, utilizza run_in_transaction_custom_retries()). Poiché la funzione Transaction può essere chiamata più di una volta per una singola transazione, non deve avere effetti collaterali, incluse le modifiche agli argomenti.

Se non è possibile confermare la transazione, ad esempio a causa di un alto tasso di contesa, 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 (tentativi, funzione, *args, **kwargs)

Esegue una funzione che contiene gli aggiornamenti di Datastore in una singola transazione, riprovando a eseguire la transazione per un numero specificato di volte in caso di contesa. Se qualsiasi codice genera un'eccezione durante la transazione, viene eseguito il rollback di tutti gli aggiornamenti apportati nella 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 chiamate della funzione in 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 (options, function, *args, **kwargs)

Esegue una funzione che contiene gli aggiornamenti di Datastore in una singola transazione utilizzando le opzioni specificate in un oggetto delle opzioni di transazione. Se qualsiasi codice genera un'eccezione durante la transazione, viene eseguito il rollback di tutti gli aggiornamenti di Datastore effettuati nella transazione.

Per le transazioni tra gruppi (XG), il parametro xg nell'oggetto opzioni di transazione deve essere impostato su True.

Argomenti

opzioni
L'oggetto Transaction options contenente le impostazioni utilizzate dalla 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 chiamante.

Se la funzione genera un'eccezione, viene eseguito il rollback della transazione. Se l'eccezione è un'eccezione Rollback, non viene nuovamente sollevata; qualsiasi altra eccezione viene nuovamente sollevata 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 a eseguire la transazione fino al numero di nuovi tentativi specificato nell'oggetto Transaction options. Poiché la funzione transaction può essere chiamata più volte per una singola transazione, non deve avere effetti collaterali, incluse le modifiche agli argomenti.

Se non è possibile confermare la transazione, ad esempio a causa di un alto tasso di contesa, 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, model_instance=Nessuno)

Crea e restituisce una rappresentazione di dizionario di un'istanza del modello.

Argomenti

model_instance
Istanza del modello da copiare.
dizionario
Se presente, dizionario in cui unire i dati del modello. I valori del modello sovrascrivono i valori nel dizionario; le voci del dizionario che non corrispondono ai campi dell'istanza del modello vengono conservate.

Decoratori

@db.transactional (propagation=ALLOWED, propagation=False, propagation=3, propagation=60)

Esegue una funzione all'interno di una transazione db. Di conseguenza, invece di chiamare run_in_transaction(func), puoi chiamare func().

Argomenti

propagation
Cosa fare se questa funzione transazionale viene chiamata dall'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 individuare l'eccezione ed eseguire il commit della transazione esterna; la funzione potrebbe aver lasciato la transazione esterna in uno stato non valido.

OBBLIGATORIO
Continua nell'eventuale transazione esistente; in caso contrario, genera un'eccezione BadRequestError.

Nota:se una funzione che utilizza questo criterio genera un'eccezione, probabilmente non è sicuro individuare 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 quelle esistenti.

Nota:una funzione che utilizza questo criterio non deve restituire alcuna entità letta nella nuova transazione, poiché le entità non sono coerenti con la transazione esterna.

NESTATA
(Non ancora supportata) Crea una transazione nidificata all'interno di una esistente.
xg
Se True, consenti le transazioni cross-group (XG). Aumenta un'eccezione BadArgumentError se impostata 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 affinché Datastore restituisca un risultato prima di interrompere con un errore. Accetta un numero intero o un valore con virgola mobile. Non può essere impostato su un valore superiore al valore predefinito (60 secondi), ma può essere regolato 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, ritentare l'operazione, provare un'operazione diversa o aggiungere l'operazione a una coda di attività).
@db.non_transactional (allow_existing=True)

Assicura che una funzione venga eseguita al di fuori di una transazione db, anche se chiamata dall'interno di una transazione.

Argomento

allow_existing
Se True, consenti la chiamata della funzione dall'interno di una transazione esistente; se False, genera invece un'eccezione BadRequestError.