Zum Inhalt

Geschäft.

Datenbanktransaktionen werden aufgrund der Codierung/Datenbank, die zum Ausgeben asynchroner Abfragen verwendet wird, unterstützt.

Die grundlegende Verwendung

Um Transaktionen zu verwenden, verwenden Sie database. transaction als asynchronen Kontextmanager:

1
2
3
4
5
async mit der Datenbank. transaction ():
    Alles, was hier genannt wird, wird eine Transaktion sein
    await model1 (). save () für
    Beispiel 2: save ()
    ...

!!!Beachten Sie, dass diese Datenbank mit der Datenbank identisch sein muss, die im ormar_config-Objekt des Modells verwendet wird.

Um zu vermeiden, dass eine Datenbankinstanz im Code übergeben wird, können Sie aus jedem Modell eine Instanz extrahieren Die während der ormar. Model-Deklaration angegebene Datenbank ist über ormar_config. database verfügbar und kann von Klassen und Instanzen aus aufgerufen werden.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Importieren von Datenbanken
Import von Sqlalchemy
Der Import von Ormar


Die Datei ist in der Datei "_(
    metadata = sqlalchemy. metadata (), oder
    Datenbank = Datenbank. Datenbank ("sqlite://")
)


Klasse Autor (ormar. Modell):
    ormar_config = base_ormar_config. copy ()(= Grundeinheit von ormar_config. copy)

    id: int = ormar. Integer (primary_key = true)(nicht bekannt)
    name: str = ormar. String (max_length = 255)[Bearbeiten | Quelltext bearbeiten]

Die Datenbank ist von der Klasse erreichbar
Datenbank = Author. ormar_config. database

Wie gut wie aus der Situation
author = Autor (Vorname ="Stephen King")
Datenbank = author. ormar_config. database = author. ormar_config. database (Eingabedaten)

Sie können. transaction () auch als Funktionsdekorator für jede asynchrone Funktion verwenden:

1
2
3
Beispiel: database. transaction ()
async def create_users (Benutzer erstellen):
    ...

Transaktionsblöcke werden als lokale Zustände von Aufgaben verwaltet, die verschachtelte Transaktionen vollständig unterstützen und Datenbankspeicherpunkte verwenden.

Manuelle Übertragung/Zurücksetzen

Für die Trading API der unteren Ebene können Sie sie manuell auslösen

1
2
3
4
5
6
7
8
transaction = await database. transaction ()(= die Datei wird angezeigt)
versuchen:
    Aktion starten.()
    ...
ausgenommen:
    await transaction. rollback ()(Übersetzung)
und Else:
    Aktion. commit ()

Testen Sie

Transaktionen sind auch während des Tests nützlich, wenn Sie ein erzwungenes Rollback anwenden können und die Daten nach jedem Test nicht bereinigen müssen.

1
2
3
4
5
6
@ marke.asyncio.
async def sample_test ():() def sample_test () für
    Async mit der Datenbank:
        async mit Datenbank. transaction (force_rollback = True):
            Ihr Test-Code ist hier
            ...