Zum Inhalt

Umsiedlung

Datenbank initialisieren

Beachten Sie , dass bei allen Beispielen davon ausgegangen wird , dass Sie bereits über eine Datenbank verfügen .

Wenn dies nicht der Fall ist und Sie eine Tabelle erstellen müssen , ist dies sehr einfach , da ormar sqlalchemy für die Erstellung der Basistabellen verwendet .

Alles , was Sie tun müssen , ist create \ _ all () wie im folgenden Beispiel aufzurufen .

1
2
3
4
5
Import von Sqlalchemy
# Geben Sie die URL der Datenbank im sqlalchemy-Format an , wie sie mit Datenbankinstanzen in der Modelldefinition verwendet wird
engine = sqlalchemy . create _ engine (" sqlite://test.db ")
Dies ist die gleiche Metadata , die in der Ormar-Modelldefinition verwendet wird .
metadata . create _ all (engl .) erstellen

Sie können auch einzelne Tabellen erstellen , die mit der sqlalchemy-Tabelle im ormar . ormar \ _ config-Objekt verfügbar sind .

1
2
3
4
5
Import von Sqlalchemy
# Geben Sie die URL der Datenbank im sqlalchemy-Format an , wie sie mit Datenbankinstanzen in der Modelldefinition verwendet wird
engine = sqlalchemy . create _ engine (" sqlite://test.db ")
Der Künstler ist ein Orma-Modell aus früheren Beispielen .
Ersteller . ormar _ config . table . create

!!!Warnung Sie müssen die Tabelle nur einmal erstellen , verwenden Sie also die Python-Konsole oder entfernen Sie das Skript nach der ersten Verwendung aus dem Produktionscode .

Die Verwendung von Destillateuren

Wie bei den Tabellen verwenden Sie alembic , da wir die Tabellen basierend auf sqlalchemy migrieren .

Initialisierung

Verwenden Sie die Befehlszeile , um dieses einfache Beispiel zu reproduzieren .

1
2
3
Init Alembic oder Alembic
Erläuterung Autogenerate - m " made some changes "
Erläuterung Alembic Upgrade Head

Beispiel Beispielenv.pyUnterlagen

Ein einfaches Beispiel für die Destillatormigration sollte ähnlich aussehen :

Wenn Ihre Anwendung ist wie folgt strukturiert :

1
2
3
4
5
> > Die App
    alembic (initialized folder - also führen Sie alembic init alembic inside app folder)
    > > (Hier sind die Modelle)
      < zurück _ _ init _ . py
      < ! - > Meine _ Modelle . py

deiner .env.pyEine Datei (im Ordner „ alembic ") könnte etwa so aussehen :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
from logging . config import fileConfig von logging . config importieren
from sqlchemy import create _ engine () [ Bearbeiten ]

aus dem alembischen Importkontext
Importieren Sys , OS

# add app folder to system path (alternative läuft aus dem Parentfolder mit Python - m ...)
myPath = os . path . dirname (os . path . abspath (_ _ file _ _)))
sys . path . insert (0 , myPath + '/../.../') oder

Dies ist das alembic config object , welches die
# access to the values within the . ini file in use (Zugriff auf die Werte innerhalb der . ini-Datei im Gebrauch)
config = context . config = Kontextdaten

# Interpret die config-Datei für Python-Logging .
# Diese Linie setzt Logger basic .
fileConfig (config . config _ file _ name) oder

# Fügen Sie das MetaData-Objekt Ihres Modells hier hinzu (das in Ormar verwendet wurde)
Unterstützung für ' Autogenerate '
vomapp.models.myImport von Metadaten .
target _ metadata = metadaten und Metadatensatz


# Geben Sie Ihre URL hier ein oder importieren Sie sie aus Ihren Einstellungen
# note that by default url is in saved sqlachemy . url variable in alembic.ini file
URL = " sqlite:///test.db "


def run _ migrations _ offline () : def run _ migrations _ offline () (zum Beispiel) :
    " Führen Sie Migrationen im Offline Modus aus . "

    Diese Konfiguration des Kontexts mit nur einer URL
    Und nicht ein Motor , obwohl ein Motor erreichbar ist
    Wie gut , durch Skipping the Engine Creation
    Wir brauchen keine DBAPI , um verfügbar zu sein .

    Rufen Sie den Kontext an . execute () Hier wird der String zum
    Scripte Ausgabe .

    """
    Das Kontextmenü (
        url = url oder
        target _ metadata = target _ metadata und
        literal _ binds = wahr
        dialect _ opts ={"paramstyle": "named"}, oder
        # Wenn Sie die UUID-Felder verwenden , um auch diesen Parameter festzulegen
        # the prefix has to match sqlalchemy import name in alembic (Der Preis muss stimmen)
        # that can be set by sqlalchemy _ module _ prefix option (default ' sa .') (Diese Option kann durch sqlalchemy _ module _ prefix gesetzt werden)
        user _ module _ prefix ='sa . ' ist die
    )

    mit context . begin _ transaction () :
        context.runmigrations (Übersetzung)


def run _ migrations _ online () : def run _ migrations _ online () (auf Englisch)
    " Führen Sie Migrationen im " Online " - Modus durch . "

    In diesem Szenario müssen wir eine Engine entwickeln .
    eine Verbindung mit dem Kontext herzustellen .

    """
    Siehe auch : connectable = create _ engine (URL)

    with connectable . connect () as Verbindung :
        Das Kontextmenü (
            Verbindung = Verbindung ,
            target _ metadata = target _ metadata und
            # Wenn Sie die UUID-Felder verwenden , um auch diesen Parameter festzulegen
            # the prefix has to match sqlalchemy import name in alembic (Der Preis muss stimmen)
            # that can be set by sqlalchemy _ module _ prefix option (default ' sa .') (Diese Option kann durch sqlalchemy _ module _ prefix gesetzt werden)
            user _ module _ prefix ='sa . ' ist ein
        )

        mit context . begin _ transaction () :
            context.runmigrations (Übersetzung)


Wenn dercontext.isDer _ offline _ mode () :
    Beispiel : run _ migrations _ offline ()
und Else :
    run _ migrations _ online () (Übersetzung)

Ausschluss-Formular

Sie können auch den include \ _ object-Parameter verwenden , der an context . configure übergeben wird , um eine bestimmte Tabelle ein -/auszuschließen .

Eine Beispielfunktion schließt eine Tabelle aus , deren Name mit data \ _ beginnt , es sei denn , sie ist " data \ _ jobs " :

1
2
3
4
5
def include _ object (object , name , type _ , reflected , compare _ to) : def include _ object (object , name , type _ , reflected , compare _ to) und def include _ object (object , name , type _ , reflected , compare _ to) :
    Wenn name und name . startswith ('data _ ') and name not in VINTI ' data _ jobs'] :
        return false zurück

    return echt

!!!Beachten Sie , dass die Funktionsparameter include _ objects (Sie können den Namen ändern) erforderlich sind und in alembic definiert sind , um zu überprüfen , was sie tun .

Dann übergeben Sie es in den Kontext (online und offline) :

1
2
3
4
5
6
7
8
Das Kontextmenü (
        url = url oder
        target_metadata = target_metadata und
        literal_binds = wahr
        dialect_opts ={"paramstyle": "named"}, oder
        user_module_prefix ='sa.',[Bearbeiten | Quelltext bearbeiten]
        include_object = include_object_object (nicht enthalten)
    )

!!!info Sie können mehr über die Erstellung, Änderung und Migration von Tabellen in der Dokumentation zur Erstellung von sqlalchemy-Tabellen lesen.