Hinweis: Entwicklern von neuen Anwendungen wird dringend empfohlen, die NDB-Clientbibliothek zu verwenden. Diese bietet im Vergleich zur vorliegenden Clientbibliothek verschiedene Vorteile, z. B. das automatische Caching von Entitäten über die Memcache API. Wenn Sie derzeit die ältere DB-Clientbibliothek verwenden, finden Sie weitere Informationen im Leitfaden zur Migration von DB- zu NDB-Clientbibliotheken.
Die auf dieser Seite erläuterten Funktionen sind im Paket google.appengine.ext.db
definiert.
Funktionen
- allocate_ids (model, count)
-
Weist einen ID-Batch im Datenspeicher einer Kombination aus Datenspeicherart und übergeordnetem Element zu.
Auf diese Art zugewiesene IDs werden vom automatischen ID-Sequenzgenerator des Datenspeichers nicht verwendet und können konfliktfrei in Entitätsschlüsseln verwendet werden.
Argumente
- model
- Der Modellschlüssel, für den ein ID-Batch zugewiesen werden soll. Dies ist ein normaler Schlüssel. Nur das übergeordnete Element und die Art des Schlüssels sind erforderlich, um zu bestimmen, welche ID-Sequenz zu verwenden ist.
- count
- Die Anzahl der IDs, die zugewiesen werden sollen.
Gibt ein Tupel der ersten und letzten zugewiesenen ID zurück. Wenn Sie beispielsweise zehn IDs mit dieser Funktion zugewiesen haben, erhalten Sie eine Rückgabe im Format (1, 10), also keine vollständige Liste der erstellten IDs.
Beispiel für das Zuweisen und Verwenden von IDs:
# 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)
-
Weist einen ID-Batch im Datenspeicher asynchron für eine Kombination aus Datenspeicherart und übergeordnetem Element zu.
Diese Funktion ist mit
allocate_ids()
identisch. Der einzige Unterschied besteht darin, dass sie ein asynchrones Objekt zurückgibt. Sie könnenget_result()
für den Rückgabewert aufrufen, um den Aufruf zu blockieren und das Ergebnis zurückzugeben.Argumente
- model
- Eine
db.Model
-Instanz, ein Schlüssel oder ein String als Vorlage zur Angabe der ID-Sequenz, in der die IDs zugeordnet werden sollen. Die zurückgegebenen IDs dürfen nur in Entitäten mit dem gleichen übergeordneten Element (falls vorhanden) und mit der gleichen Art wie dieser Schlüssel verwendet werden. - count
- Die Anzahl der IDs, die zugewiesen werden sollen.
Gibt ein Tupel der ersten und letzten zugewiesenen ID zurück. Wenn Sie beispielsweise zehn IDs mit dieser Funktion zugewiesen haben, erhalten Sie einen Rückgabewert im Format (1, 10), jedoch keine vollständige Liste der erstellten IDs.
- allocate_id_range (model, start, end, **kwargs)
-
Weist einen Bereich von IDs mit spezifischen Endpunkten zu. Nachdem diese IDs zugeordnet wurden, können Sie sie manuell neu erstellten Entitäten zuweisen.
Der automatische ID-Allocator des Datenspeichers weist niemals einen Schlüssel zu, der bereits zugewiesen wurde (entweder durch automatische ID-Zuweisung oder durch einen expliziten Aufruf von "allocate_ids"). Aus diesem Grund werden Entitäten im angegebenen Schlüsselbereich niemals überschrieben. Allerdings können durch das Schreiben von Entitäten mit manuell zugewiesenen Schlüsseln in diesem Bereich vorhandene Entitäten (oder neue Entitäten, die durch einen separaten Request geschrieben wurden) überschrieben werden, je nach zurückgegebenem Schlüsselbereichszustand.
Verwenden Sie diese Funktion nur, wenn Sie einen vorhandenen numerischen ID-Bereich haben, den Sie reservieren möchten (z. B. zum massenhaften Laden von Entitäten, die bereits IDs haben). Wenn es für Sie nicht relevant ist, welche IDs Sie erhalten, verwenden Sie stattdessen
allocate_ids()
.Argumente
- model
- Eine
db.Model
-Instanz, ein Schlüssel oder ein String als Vorlage zur Angabe der ID-Sequenz, in der die IDs zugeordnet werden sollen. Die zurückgegebenen IDs dürfen nur in Entitäten mit dem gleichen übergeordneten Element (falls vorhanden) und mit der gleichen Art wie dieser Schlüssel verwendet werden. - start
- Die erste zuzuweisende ID, eine Zahl.
- end
- Die letzte zuzuweisende ID, eine Zahl.
Gibt einen Wert (
KEY_RANGE_EMPTY
,KEY_RANGE_CONTENTION
oderKEY_RANGE_COLLISION
) zurück. Wenn nichtKEY_RANGE_EMPTY
, stellt dies ein mögliches Problem bei der Verwendung des zugewiesenen Schlüsselbereichs dar. - create_transaction_options (**kwargs)
-
Erstellt ein Transaktionsoptionsobjekt (Klasse
TransactionOptions
) zur Steuerung der Transaktionsausführung. Sie übergeben das resultierende Objekt als erstes Argument an dierun_in_transaction_options()
-Funktion.Argumente
- propagation
- Wie vorgegangen werden soll, wenn diese Transaktionsfunktion von einer anderen Transaktion aufgerufen wird:
- ALLOWED
- Wenn bereits eine Transaktion läuft, wird diese weiterhin verwendet. Wenn nicht, wird eine neue Transaktion gestartet.
Hinweis: Wenn eine Funktion, die diese Richtlinie verwendet, eine Ausnahme auslöst, ist das Abfangen der Ausnahme und endgültige Speichern (Commit) der Transaktion nicht sicher. Die Funktion hat die äußere Transaktion möglicherweise in einem fehlerhaften Zustand verlassen.
- MANDATORY
- Setzt eine vorhandene Transaktion fort. Wenn keine Transaktion vorhanden ist, wird die Ausnahme
BadRequestError
ausgelöst.Hinweis: Wenn eine Funktion, die diese Richtlinie verwendet, eine Ausnahme auslöst, ist das Abfangen der Ausnahme und endgültige Speichern (Commit) der Transaktion nicht sicher. Die Funktion hat die äußere Transaktion möglicherweise in einem fehlerhaften Zustand verlassen.
- INDEPENDENT
- Erstellt eine neue Transaktion und unterbricht die vorhandene Transaktion.
Hinweis: Eine Funktion mit dieser Richtlinie gibt in der Regel keine Entitäten zurück, die in der neuen Transaktion gelesen werden, da die Entitäten nicht mit der äußeren Transaktion konsistent sind.
- NESTED
- (Noch nicht unterstützt) Erstellt eine verschachtelte Transaktion innerhalb einer vorhandenen Transaktion.
- xg
- Wenn
True
, werden gruppenübergreifende Transaktionen {XG} zugelassen. Löst die AusnahmeBadArgumentError
aus, wenn ein anderer Wert als ein boolescher Wert festgelegt wird. - retries
- Anzahl der Wiederholungen, die bei einem fehlgeschlagenen Commit der Transaktion versucht werden können.
- deadline
- Maximale Wartezeit in Sekunden, in der ein Ergebnis aus dem Datenspeicher zurückgegeben werden kann, bevor der Vorgang mit einem Fehler abgebrochen wird. Akzeptiert entweder eine Ganzzahl oder einen Gleitkommawert. Der Wert kann nicht höher als der Standardwert (60 Sekunden) sein. Eine Anpassung auf einen niedrigeren Wert ist jedoch möglich, wenn ein bestimmter Vorgang schnell fehlschlagen soll. Dies kann beispielsweise hilfreich sein, wenn eine schnellere Antwort an den Nutzer gesendet, der Vorgang wiederholt, ein anderer Vorgang ausgeführt oder der Vorgang einer Aufgabenwarteschlange hinzugefügt werden soll.
Im folgenden Beispiel werden die Optionen für eine nachfolgende gruppenübergreifende Transaktion (XG) erstellt:
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)
-
Löscht mindestens eine Modellinstanz aus dem Datenspeicher.
Argumente
- models
- Eine Modellinstanz, ein Entitätsschlüssel oder eine Liste (bzw. ein anderer iterierbarer Wert) der Modellinstanzen oder Entitätsschlüssel, die gelöscht werden sollen.
- deadline
- Maximale Wartezeit in Sekunden, in der ein Ergebnis aus dem Datenspeicher zurückgegeben werden kann, bevor der Vorgang mit einem Fehler abgebrochen wird. Akzeptiert entweder eine Ganzzahl oder einen Gleitkommawert. Der Wert kann nicht höher als der Standardwert (60 Sekunden) sein. Eine Anpassung auf einen niedrigeren Wert ist jedoch möglich, wenn ein bestimmter Vorgang schnell fehlschlagen soll. Dies kann beispielsweise hilfreich sein, wenn eine schnellere Antwort an den Nutzer gesendet, der Vorgang wiederholt, ein anderer Vorgang ausgeführt oder der Vorgang einer Aufgabenwarteschlange hinzugefügt werden soll.
Wie bei
put()
können mehrere Schlüssel angegeben werden, die sich in mehr als einer Entitätengruppe befinden können.Wenn während des Vorgangs ein Fehler auftritt, wird immer eine Ausnahme ausgegeben, auch wenn einige Entitäten tatsächlich gelöscht wurden. Wenn der Aufruf ohne Ausnahme zurückgegeben wird, wurden alle Entitäten erfolgreich gelöscht.
Achtung: Das Löschen mehrerer Entitäten in einem einzigen Vorgang garantiert nicht, dass der Löschvorgang atomar erfolgt, außer der Vorgang wird innerhalb einer Transaktion ausgeführt. Bei anderen Prozessen, die den Datenspeicher abfragen, werden möglicherweise inkonsistente Ergebnisse ausgegeben, selbst wenn die Abfrage mit Strong Consistency ausgeführt wird.
- delete_async (models, deadline=60)
-
Löscht mindestens eine Modellinstanz asynchron aus dem Datenspeicher.
Diese Funktion ist mit
delete()
identisch. Der einzige Unterschied besteht darin, dass sie ein asynchrones Objekt zurückgibt. Sie könnenget_result()
für den Rückgabewert aufrufen, um den Aufruf zu blockieren.Argumente
- models
- Eine Modellinstanz, ein Entitätsschlüssel oder eine Liste (bzw. ein anderer iterierbarer Wert) der Modellinstanzen oder Entitätsschlüssel, die gelöscht werden sollen.
- deadline
- Maximale Wartezeit in Sekunden, in der ein Ergebnis aus dem Datenspeicher zurückgegeben werden kann, bevor der Vorgang mit einem Fehler abgebrochen wird. Akzeptiert entweder eine Ganzzahl oder einen Gleitkommawert. Der Wert kann nicht höher als der Standardwert (60 Sekunden) sein. Eine Anpassung auf einen niedrigeren Wert ist jedoch möglich, wenn ein bestimmter Vorgang schnell fehlschlagen soll. Dies kann beispielsweise hilfreich sein, wenn eine schnellere Antwort an den Nutzer gesendet, der Vorgang wiederholt, ein anderer Vorgang ausgeführt oder der Vorgang einer Aufgabenwarteschlange hinzugefügt werden soll.
Wie bei
put()
können mehrere Schlüssel angegeben werden, die sich in mehr als einer Entitätengruppe befinden können.Diese Funktion gibt ein Objekt zurück, mit dem Sie das Ergebnis des Aufrufs blockieren können.
Wenn während des Vorgangs ein Fehler auftritt, wird immer eine Ausnahme ausgegeben, auch wenn einige Entitäten tatsächlich gelöscht wurden. Wenn der Aufruf ohne Ausnahme zurückgegeben wird, wurden alle Entitäten erfolgreich gelöscht.
Achtung: Das Löschen mehrerer Entitäten in einem einzigen Vorgang garantiert nicht, dass der Löschvorgang atomar erfolgt, außer der Vorgang wird innerhalb einer Transaktion ausgeführt. Bei anderen Prozessen, die den Datenspeicher abfragen, werden möglicherweise inkonsistente Ergebnisse ausgegeben, selbst wenn die Abfrage mit Strong Consistency ausgeführt wird.
- get (keys, read_policy=STRONG_CONSISTENCY, deadline=60)
-
Ruft die spezifische(n) Modellinstanz(en) mit den angegebenen Schlüsseln aus dem Datenspeicher ab.
Argumente
- keys
- Schlüssel der abzurufenden Entität, eine Stringdarstellung des Schlüssels oder eine Liste von Schlüsseln oder ihrer Stringdarstellungen
- read_policy
- Leserichtlinie, die das gewünschte Maß an Datenkonsistenz angibt:
- STRONG_CONSISTENCY
- Garantiert aktuelle Ergebnisse, ist jedoch auf nur eine Entitätengruppe beschränkt.
- EVENTUAL_CONSISTENCY
- Kann für mehrere Entitätengruppen gelten, gibt aber teilweise veraltete Ergebnisse zurück. Abfragen mit Eventual Consistency werden in der Regel schneller ausgeführt als Abfragen mit Strong Consistency. Es gibt jedoch keine Garantie hierfür.
Hinweis: Globale Nicht-Ancestor-Abfragen ignorieren dieses Argument.
- deadline
- Maximale Wartezeit in Sekunden, in der ein Ergebnis aus dem Datenspeicher zurückgegeben werden kann, bevor der Vorgang mit einem Fehler abgebrochen wird. Akzeptiert entweder eine Ganzzahl oder einen Gleitkommawert. Der Wert kann nicht höher als der Standardwert (60 Sekunden) sein. Eine Anpassung auf einen niedrigeren Wert ist jedoch möglich, wenn ein bestimmter Vorgang schnell fehlschlagen soll. Dies kann beispielsweise hilfreich sein, wenn eine schnellere Antwort an den Nutzer gesendet, der Vorgang wiederholt, ein anderer Vorgang ausgeführt oder der Vorgang einer Aufgabenwarteschlange hinzugefügt werden soll.
Wenn
keys
aus einem einzelnen Schlüssel oder dessen Stringdarstellung besteht, gibt diese Funktion die mit dem Schlüssel verknüpfte Modellinstanz zurück, sofern der Schlüssel im Datenspeicher vorhanden ist. Andernfalls wirdNone
zurückgegeben. Wennkeys
eine Liste ist, wird die entsprechende Liste der Modellinstanzen zurückgegeben. Schlüssel, für die keine Entität vorhanden ist, erhalten den WertNone
.Siehe auch
Model.get()
- get_async (keys, read_policy=STRONG_CONSISTENCY, deadline=60)
-
Ruft asynchron die angegebenen Modellinstanzen aus dem Datenspeicher ab.
Diese Funktion ist mit
get()
identisch. Der einzige Unterschied besteht darin, dass sie ein asynchrones Objekt zurückgibt. Sie könnenget_result()
für den Rückgabewert aufrufen, um den Aufruf zu blockieren und die Ergebnisse abzurufen.Argumente
- keys
- Schlüssel der abzurufenden Entität, eine Stringdarstellung des Schlüssels oder eine Liste von Schlüsseln oder ihrer Stringdarstellungen
- read_policy
- Leserichtlinie, die das gewünschte Maß an Datenkonsistenz angibt:
- STRONG_CONSISTENCY
- Garantiert aktuelle Ergebnisse, ist jedoch auf nur eine Entitätengruppe beschränkt.
- EVENTUAL_CONSISTENCY
- Kann für mehrere Entitätengruppen gelten, gibt aber teilweise veraltete Ergebnisse zurück. Abfragen mit Eventual Consistency werden in der Regel schneller ausgeführt als Abfragen mit Strong Consistency. Es gibt jedoch keine Garantie hierfür.
Hinweis: Globale Nicht-Ancestor-Abfragen ignorieren dieses Argument.
- deadline
- Maximale Wartezeit in Sekunden, in der ein Ergebnis aus dem Datenspeicher zurückgegeben werden kann, bevor der Vorgang mit einem Fehler abgebrochen wird. Akzeptiert entweder eine Ganzzahl oder einen Gleitkommawert. Der Wert kann nicht höher als der Standardwert (60 Sekunden) sein. Eine Anpassung auf einen niedrigeren Wert ist jedoch möglich, wenn ein bestimmter Vorgang schnell fehlschlagen soll. Dies kann beispielsweise hilfreich sein, wenn eine schnellere Antwort an den Nutzer gesendet, der Vorgang wiederholt, ein anderer Vorgang ausgeführt oder der Vorgang einer Aufgabenwarteschlange hinzugefügt werden soll.
Wenn
keys
aus einem einzelnen Schlüssel oder dessen Stringdarstellung besteht, gibt diese Funktion die mit dem Schlüssel verknüpfte Modellinstanz zurück, sofern der Schlüssel im Datenspeicher vorhanden ist. Andernfalls wirdNone
zurückgegeben. Wennkeys
eine Liste ist, wird die entsprechende Liste der Modellinstanzen zurückgegeben. Schlüssel, für die keine Entität vorhanden ist, erhalten den WertNone
.Siehe auch
Model.get()
- get_indexes ()
-
Gibt eine Liste der zusammengesetzten Indexe zurück, die zur aufrufenden Anwendung gehören.
Das folgende Beispiel veranschaulicht, wie Indexe abgerufen und verwendet werden:
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 ()
-
Gibt asynchron eine Liste zusammengesetzter Indexe zurück, die zur aufrufenden Anwendung gehören.
- is_in_transaction ()
-
Gibt einen booleschen Wert zurück, der angibt, ob der aktuelle Bereich in der Transaktion ausgeführt wird.
- model_to_protobuf (model_instance)
-
Erstellt die Protokollpufferserialisierung einer
Model
-Instanz. Bei einem Protokollpuffer handelt es sich um das Serialisierungsformat von Google, das bei Remoteprozeduraufrufen verwendet wird. Es kann beim Serialisieren von Datenspeicherobjekten zum Zweck der Sicherung oder Wiederherstellung nützlich sein.Achtung: Diese Funktion verwendet ein anderes (älteres) Format für Protokollpuffer als das Open-Source-Protokollpufferformat und ist nicht mit der Open-Source-Implementierung kompatibel.
Argument
- model_instance
- Die Instanz der Klasse
Model
(oder einer abgeleiteten Klasse), die serialisiert werden soll.
Gibt die Protokollpufferserialisierung des Objekts als Bytestring zurück.
- model_from_protobuf (pb)
-
Erstellt eine
Model
-Instanz basierend auf einer Protokollpufferserialisierung. Weitere Informationen finden Sie untermodel_to_protobuf()
.Argument
- pb
- Die Protokollpufferserialisierung gemäß der Rückgabe durch
model_to_protobuf()
.
Gibt ein Objekt der entsprechenden Klasse "kind" zurück. Wenn die Klasse "kind" nicht vorhanden ist, wird die Ausnahme
KindError
ausgelöst. Wenn das Objekt gemäß dem Modell ungültig ist, wird die AusnahmeBadValueError
ausgelöst.Sie können das neue Objekt wie jede andere
Model
-Instanz im Datenspeicher speichern, z. B. durch Aufrufen derput()
-Methode. Das Objekt behält den Schlüssel bei, der beim Erstellen des Protokollpuffers vorhanden war. Durch Speichern des deserialisierten Objekts wird das vorhandene Objekt überschrieben, wenn im Datenspeicher bereits ein Objekt mit diesem Schlüssel vorhanden ist.Achtung: Wenn der Schlüssel des Objekts eine vom System zugewiesene ID verwendet und diese ID nicht bereits für den angegebenen Pfad und die angegebene Art zugeordnet wurde, ist das Speichern zwar erfolgreich, die ID ist jedoch nicht reserviert. Diese ID kann einem Objekt zugeordnet werden, das später erstellt wird. Dabei wird das ältere Objekt überschrieben. Stellen Sie zur Sicherheit Objekte nur in derselben Anwendung wieder her, in der sie bei der Serialisierung vorhanden waren.
- model_is_projection (model_instance)
-
Gibt
True
zurück, wenn die angegebene Abfrage (model_instance
) eine Projektionsabfrage anstelle einer Abfrage für eine vollständige Entität ist.Argument
- model_instance
- Die Abfrage, die Sie überprüfen, um zu bestimmen, ob es sich um eine Projektionsabfrage handelt.
Gibt
True
zurück, wenn die Abfrage eine Projektionsabfrage ist. Andernfalls wirdFalse
zurückgegeben. - put (models, deadline=60)
-
Schreibt mindestens eine Modellinstanz in den Datenspeicher.
Argumente
- models
- Eine zu speichernde Modellinstanz oder Liste mit Modellinstanzen.
- deadline
- Maximale Wartezeit in Sekunden, in der ein Ergebnis aus dem Datenspeicher zurückgegeben werden kann, bevor der Vorgang mit einem Fehler abgebrochen wird. Akzeptiert entweder eine Ganzzahl oder einen Gleitkommawert. Der Wert kann nicht höher als der Standardwert (60 Sekunden) sein. Eine Anpassung auf einen niedrigeren Wert ist jedoch möglich, wenn ein bestimmter Vorgang schnell fehlschlagen soll. Dies kann beispielsweise hilfreich sein, wenn eine schnellere Antwort an den Nutzer gesendet, der Vorgang wiederholt, ein anderer Vorgang ausgeführt oder der Vorgang einer Aufgabenwarteschlange hinzugefügt werden soll.
Wenn mehrere Modellinstanzen angegeben sind, können diese in mehreren Entitätengruppen vorliegen.
Wenn während des Vorgangs ein Fehler auftritt, wird immer eine Ausnahme ausgegeben, auch wenn einige der Entitäten tatsächlich geschrieben wurden. Wenn der Aufruf ohne Ausnahme zurückgegeben wird, wurden alle Entitäten erfolgreich geschrieben.
Wenn
models
aus einer einzelnen Modellinstanz besteht, gibt diese Funktion das entsprechende Schlüsselobjekt zurück. Wennmodels
eine Liste ist, ist der Rückgabewert eine Liste der entsprechenden Schlüsselobjekte.Achtung: Das Schreiben mehrerer Entitäten in einem einzigen Vorgang garantiert nicht, dass der Schreibvorgang atomar erfolgt, außer der Vorgang wird innerhalb einer Transaktion ausgeführt. Bei anderen Prozessen, die den Datenspeicher abfragen, werden möglicherweise inkonsistente Ergebnisse ausgegeben, selbst wenn die Abfrage mit Strong Consistency ausgeführt wird.
- put_async (models, deadline=60)
-
Schreibt mindestens eine Modellinstanz in den Datenspeicher.
Diese Funktion ist mit
put()
identisch. Der einzige Unterschied besteht darin, dass sie ein asynchrones Objekt zurückgibt. Sie könnenget_result()
für den Rückgabewert aufrufen, um den Aufruf zu blockieren und die Ergebnisse abzurufen.Argumente
- models
- Eine zu speichernde Modellinstanz oder Liste mit Modellinstanzen.
- deadline
- Maximale Wartezeit in Sekunden, in der ein Ergebnis aus dem Datenspeicher zurückgegeben werden kann, bevor der Vorgang mit einem Fehler abgebrochen wird. Akzeptiert entweder eine Ganzzahl oder einen Gleitkommawert. Der Wert kann nicht höher als der Standardwert (60 Sekunden) sein. Eine Anpassung auf einen niedrigeren Wert ist jedoch möglich, wenn ein bestimmter Vorgang schnell fehlschlagen soll. Dies kann beispielsweise hilfreich sein, wenn eine schnellere Antwort an den Nutzer gesendet, der Vorgang wiederholt, ein anderer Vorgang ausgeführt oder der Vorgang einer Aufgabenwarteschlange hinzugefügt werden soll.
Wenn mehrere Modellinstanzen angegeben sind, können diese in mehreren Entitätengruppen vorliegen.
Wenn während des Vorgangs ein Fehler auftritt, wird immer eine Ausnahme ausgegeben, auch wenn einige der Entitäten tatsächlich geschrieben wurden. Wenn der Aufruf ohne Ausnahme zurückgegeben wird, wurden alle Entitäten erfolgreich geschrieben.
Diese Funktion gibt ein asynchrones Objekt zurück, für das
get_result()
aufgerufen werden kann. Die zurückgegebenen Ergebnisse sind mit jenen fürput()
identisch.Achtung: Das Schreiben mehrerer Entitäten in einem einzigen Vorgang garantiert nicht, dass der Schreibvorgang atomar erfolgt, außer der Vorgang wird innerhalb einer Transaktion ausgeführt. Bei anderen Prozessen, die den Datenspeicher abfragen, werden möglicherweise inkonsistente Ergebnisse ausgegeben, selbst wenn die Abfrage mit Strong Consistency ausgeführt wird.
- query_descendants (model_instance)
-
Gibt eine Abfrage für alle Nachfolgerelemente einer Modellinstanz zurück.
Argument
- model_instance
- Die Modellinstanz, deren Nachfolgerelemente Sie finden möchten.
- run_in_transaction (function, *args, **kwargs)
-
Führt eine Funktion aus, die Aktualisierungen des Datenspeichers in einer einzigen Transaktion enthält. Wenn während der Transaktion ein Code eine Ausnahme auslöst, werden alle in der Transaktion vorgenommenen Aktualisierungen rückgängig gemacht. Alternativ können Sie den Decorator
@db.transactional()
verwenden.Argumente
- Funktion
- Auszuführende Funktion.
- args
- Positionsargumente, die an die Funktion übergeben werden sollen.
- kwargs
- Keyword-Argumente, die an die Funktion übergeben werden sollen.
Wenn die Funktion einen Wert zurückgibt, gibt
run_in_transaction()
den Wert an den Aufrufer zurück.Die Transaktion wird zurückgesetzt, wenn die Funktion eine Ausnahme ausgibt. Wenn es sich dabei um die Ausnahme
Rollback
handelt, wird sie nicht noch einmal ausgegeben. Jede andere Ausnahme wird wiederholt an das aufrufende Element ausgegeben.Für Transaktionen werden im Datenspeicher optimistische Sperren und Wiederholungen verwendet. Wenn die von der Funktion vorbereitete Transaktion nicht mit Commit bestätigt werden kann, ruft
run_in_transaction()
die Funktion noch einmal auf und wiederholt die Transaktion bis zu dreimal. Wenn Sie eine andere Anzahl von Wiederholungen möchten, verwenden Sierun_in_transaction_custom_retries()
. Da die Transaktionsfunktion bei einer einzelnen Transaktion mehrmals aufgerufen werden kann, sollte es bei der Funktion nicht zu Nebenwirkungen kommen, was auch Änderungen an Argumenten einschließt.Wenn die Transaktion nicht mit Commit bestätigt werden kann, z. B. aufgrund einer Vielzahl von Konflikten, wird die Ausnahme
TransactionFailedError
ausgelöst.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)
-
Führt eine Funktion aus, die Aktualisierungen des Datenspeichers in einer einzigen Transaktion enthält. Wenn die Transaktion aufgrund eines Konflikts fehlschlägt, findet eine bestimmte Anzahl von Wiederholungen statt. Wenn während der Transaktion ein Code eine Ausnahme auslöst, werden alle in der Transaktion vorgenommenen Aktualisierungen rückgängig gemacht.
Abgesehen von der Möglichkeit, die Anzahl der Wiederholungen anzugeben, verhält sich diese Funktion wie
run_in_transaction()
.Argumente
- retries
- Maximale Anzahl der Versuche, die Funktion im Fall eines Konflikts innerhalb der Entitätengruppe aufzurufen (mehrere Nutzer versuchen gleichzeitig, die Gruppe zu ändern).
- Funktion
- Auszuführende Funktion.
- args
- Positionsargumente, die an die Funktion übergeben werden sollen.
- kwargs
- Keyword-Argumente, die an die Funktion übergeben werden sollen.
- run_in_transaction_options (options, function, *args, **kwargs)
-
Führt eine Funktion aus, die Aktualisierungen des Datenspeichers in einer einzigen Transaktion enthält. Dazu werden die Optionen verwendet, die in einem Objekt für Transaktionsoptionen angegeben sind. Wenn während der Transaktion ein Code eine Ausnahme auslöst, werden alle in der Transaktion vorgenommenen Datenspeicheraktualisierungen rückgängig gemacht.
Für gruppenübergreifende Transaktionen (XG) muss für den Parameter
xg
im Objekt der Transaktionsoptionen der WertTrue
festgelegt sein.Argumente
- options
- Das Objekt der Transaktionsoptionen mit den Einstellungen, die von dieser Transaktion verwendet werden. Wenn Sie XG-Transaktionen ermöglichen möchten, muss der Parameter xg auf
True
gesetzt sein. - Funktion
- Auszuführende Funktion.
- args
- Positionsargumente, die an die Funktion übergeben werden sollen.
- kwargs
- Keyword-Argumente, die an die Funktion übergeben werden sollen.
Wenn die Funktion einen Wert zurückgibt, gibt
run_in_transaction_options()
den Wert an den Aufrufer zurück.Die Transaktion wird zurückgesetzt, wenn die Funktion eine Ausnahme ausgibt. Wenn es sich dabei um die Ausnahme
Rollback
handelt, wird sie nicht noch einmal ausgegeben. Jede andere Ausnahme wird wiederholt an das aufrufende Element ausgegeben.Für Transaktionen werden im Datenspeicher optimistische Sperren und Wiederholungen verwendet. Wenn die Transaktion, die von der Funktion vorbereitet wurde, nicht mit Commit bestätigt werden kann, wird die Funktion durch
run_in_transaction_options()
noch einmal aufgerufen. Dabei wird die Transaktion bis zu dreimal wiederholt. Da die Transaktionsfunktion bei einer einzelnen Transaktion mehrmals aufgerufen werden kann, sollte es bei der Funktion nicht zu Nebenwirkungen kommen, was auch Änderungen an Argumenten einschließt.Wenn die Transaktion nicht mit Commit bestätigt werden kann, z. B. aufgrund einer Vielzahl von Konflikten, wird die Ausnahme
TransactionFailedError
ausgelöst.Im folgenden Beispiel wird veranschaulicht, wie Sie mit dieser Funktion eine gruppenübergreifende Transaktion ausführen können:
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)
-
Erstellt eine Wörterbuchdarstellung einer Modellinstanz und gibt diese zurück.
Argumente
- model_instance
- Zu kopierende Modellinstanz.
- dictionary
- Das Wörterbuch, in das die Daten des Modells eingefügt werden sollen, sofern vorhanden. Werte im Wörterbuch werden von Modellwerten überschrieben. Wörterbucheinträge, die nicht den Feldern in der Modellinstanz entsprechen, bleiben erhalten.
Decorators
- @db.transactional (propagation=ALLOWED, xg=False, retries=3, deadline=60)
-
Ermöglicht die Ausführung einer Funktion in einer
db
-Transaktion. Auf diese Weise können Siefunc()
anstelle vonrun_in_transaction(func)
aufrufen.Argumente
- propagation
- Wie vorgegangen werden soll, wenn diese Transaktionsfunktion von einer anderen Transaktion aufgerufen wird:
- ALLOWED
- Wenn bereits eine Transaktion läuft, wird diese weiterhin verwendet. Wenn nicht, wird eine neue Transaktion gestartet.
Hinweis: Wenn eine Funktion, die diese Richtlinie verwendet, eine Ausnahme auslöst, ist das Abfangen der Ausnahme und endgültige Speichern (Commit) der Transaktion nicht sicher. Die Funktion hat die äußere Transaktion möglicherweise in einem fehlerhaften Zustand verlassen.
- MANDATORY
- Setzt eine vorhandene Transaktion fort. Wenn keine Transaktion vorhanden ist, wird die Ausnahme
BadRequestError
ausgelöst.Hinweis: Wenn eine Funktion, die diese Richtlinie verwendet, eine Ausnahme auslöst, ist das Abfangen der Ausnahme und endgültige Speichern (Commit) der Transaktion nicht sicher. Die Funktion hat die äußere Transaktion möglicherweise in einem fehlerhaften Zustand verlassen.
- INDEPENDENT
- Erstellt eine neue Transaktion und unterbricht die vorhandene Transaktion.
Hinweis: Eine Funktion mit dieser Richtlinie gibt in der Regel keine Entitäten zurück, die in der neuen Transaktion gelesen werden, da die Entitäten nicht mit der äußeren Transaktion konsistent sind.
- NESTED
- (Noch nicht unterstützt) Erstellt eine verschachtelte Transaktion innerhalb einer vorhandenen Transaktion.
- xg
- Wenn
True
, werden gruppenübergreifende Transaktionen {XG} zugelassen. Löst die AusnahmeBadArgumentError
aus, wenn ein anderer Wert als ein boolescher Wert festgelegt wird. - retries
- Anzahl der Wiederholungen, die bei einem fehlgeschlagenen Commit der Transaktion versucht werden können.
- deadline
- Maximale Wartezeit in Sekunden, in der ein Ergebnis aus dem Datenspeicher zurückgegeben werden kann, bevor der Vorgang mit einem Fehler abgebrochen wird. Akzeptiert entweder eine Ganzzahl oder einen Gleitkommawert. Der Wert kann nicht höher als der Standardwert (60 Sekunden) sein. Eine Anpassung auf einen niedrigeren Wert ist jedoch möglich, wenn ein bestimmter Vorgang schnell fehlschlagen soll. Dies kann beispielsweise hilfreich sein, wenn eine schnellere Antwort an den Nutzer gesendet, der Vorgang wiederholt, ein anderer Vorgang ausgeführt oder der Vorgang einer Aufgabenwarteschlange hinzugefügt werden soll.
- @db.non_transactional (allow_existing=True)
-
Sorgt dafür, dass eine Funktion außerhalb einer
db
-Transaktion ausgeführt wird, selbst wenn sie innerhalb einer Transaktion aufgerufen wird.Argument
- allow_existing
- Wenn
True
, kann die Funktion über eine vorhandene Transaktion aufgerufen werden. WennFalse
, wird stattdessen die AusnahmeBadRequestError
ausgelöst.