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 .
| 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 .
| 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 .
| 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 :
| > > 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)
|
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 " :
| 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) :
| 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.