migratie
database initialisatie
Houd er rekening mee dat alle voorbeelden ervan uitgaan dat u al een database heeft.
Als dit niet het geval is en u tabellen moet maken, dan is dit heel eenvoudig omdat Ormar sqlalchemy gebruikt voor de onderliggende tabelopbouw.
Het enige wat je hoeft te doen is create\ _ all () aanroepen zoals in het volgende voorbeeld.
| Sqlalchemie invoeren
# haal uw database-url in sqlalchemy-indeling - hetzelfde als gebruikt met databases-instantie die wordt gebruikt in modeldefinitie
Motor = sqlalchemy.create _ engine ("sqlite: / / test.db")
# Merk op dat dit dezelfde metagegevens moeten zijn die worden gebruikt in de definitie van ormar-modellen
aanmaken _ alles (engine)
|
U kunt ook afzonderlijke tabellen maken, die worden weergegeven in het ormar.ormar\ _ config-object.
| Sqlalchemie invoeren
# haal uw database-url in sqlalchemy-indeling - hetzelfde als gebruikt met databases-instantie die wordt gebruikt in modeldefinitie
Motor = sqlalchemy.create _ engine ("sqlite: / / test.db")
# Artist is een ormar model uit eerdere voorbeelden
Artiesten.ormar _ config table.create (engine)
|
!!!Waarschuwing: u hoeft de tabel maar één keer te maken, dus gebruik de Python-console of verwijder het script uit uw productiecode na het eerste gebruik.
Gebruik van distilleerder
Net als bij tabellen, gebruiken we alembic, aangezien we tabellen migreren op basis van sqlalchemy.
initialisatie
Reproduceer dit minimalistische voorbeeld met behulp van de opdrachtregel.
| Alembic in het alembic
Alembische revisie --autogeneration -m "enkele wijzigingen aangebracht"
Alembic upgrade hoofd
|
Voorbeeld env.py bestand
Een eenvoudig voorbeeld van een stille migratie moet vergelijkbaar zijn met:
Wanneer uw aanvraag als volgt is opgebouwd:
| - > app
- > alembic (geïnitialiseerde map - dus voer alembic init alembic uit in de app-map)
- > modellen (hier zijn de modellen)
- > _ _ init _ _
- > my_models.py
|
Uw env.py bestand (in de map alembic) zou er als volgt uit kunnen zien:
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 | Uit logging.config import fileConfig
Vanuit sqlalchemy importeren create _ engine
Uit alembische importcontext
Sys, os importeren
# voeg app-map toe aan systeempad (alternatief is het uitvoeren vanuit de bovenliggende map met python -m...)
myPath = os.path.dirname (os.path.abspath (_ _ bestand _ _))
Sys.path.insert (0, myPath + '/.. /.. /')
# dit is het Alembic Config object, dat
# toegang tot de waarden in het gebruikte .ini bestand.
Context = context.config
# Interpreteer het configuratiebestand voor Python-logboekregistratie.
# Deze regel stelt in principe loggers in.
fileConfig (config. config _ file _ name)
# voeg hier het MetaData-object van uw model toe (het object dat wordt gebruikt in ormar)
# ondersteuning voor 'autogeneration'
Van app.models.import metadata mijn _ modellen
doel _ metadata = metadata
# stel hier je url in of importeer vanuit instellingen
# Merk op dat de standaard url in de opgeslagen sqlachemy.url-variabele in het bestand alembic.ini staat
URL = "sqlite: / / test.db"
Def _ migrations _ offline uitvoeren ():
"" Migraties uitvoeren in de modus 'offline'.
Dit configureert de context met slechts een URL
En geen motor, hoewel een motor acceptabel is
Hier als well.By het overslaan van de Engine-creatie
We hebben zelfs geen DBAPI nodig om beschikbaar te zijn.
Oproepen om context.perform () hier zendt de gegeven string naar de
Script uitvoer.
"""
Context .configure (
URL = URL,
doel _ metadata = doel _ metadata,
letterlijke _ bindingen = Waar,
dialect _ opts ={"paramstyle": "named"},
# als je UUID-veld gebruikt, stel dan ook deze param in
# het voorvoegsel moet overeenkomen met de importnaam sqlalchemy in alembic
# dat kan worden ingesteld met de optie sqlalchemy _ module _ prefix (standaard 'sa.')
user _ module _ prefix = 'sa.'
)
Met context. begin _ transactie ():
Context. uitvoeren _ migraties ()
Def _ migraties _ online uitvoeren ():
"" Migraties uitvoeren in de modus 'online'.
In dit scenario moeten we een engine maken
En associeer een connectie met de context.
"""
Aansluitbaar = create _ engine (URL)
Met connectable.connect () als aansluiting:
Context .configure (
connection=connection,
doel _ metadata = doel _ metadata,
# als je UUID-veld gebruikt, stel dan ook deze param in
# het voorvoegsel moet overeenkomen met de importnaam sqlalchemy in alembic
# dat kan worden ingesteld met de optie sqlalchemy _ module _ prefix (standaard 'sa.')
user _ module _ prefix = 'sa.'
)
Met context. begin _ transactie ():
Context. uitvoeren _ migraties ()
Als context _ offline _ modus () is:
_ migraties _ offline uitvoeren ()
Anders:
_ migraties _ online uitvoeren ()
|
U kunt ook specifieke tabellen opnemen / uitsluiten met het argument\ _ object opnemen dat is doorgegeven aan context.configure. Dit zou een functie moeten zijn die Waar / Onwaar retourneert voor een bepaald object.
De voorbeeldfunctie sluit een tabel uit waarvan de naam begint met data\ _, tenzij het "data\ _ jobs" is:
| Def onder _ object (object, naam, type _, weerspiegeld, vergelijken _ met):
Als naam en naam.startswith ('data _') en naam niet in ['data _ jobs']:
Terugkeer Valse
Geeft Waar terug
|
!!!Merk op dat\ _ objecten functieargumenten (u kunt de naam wijzigen) vereist en gedefinieerd zijn in alembic om te controleren wat ze doen, controleer de alembic documentatie
Geef het vervolgens door in context (online en offline):
| Context .configure (
URL = URL,
doel _ metadata = doel _ metadata,
letterlijke _ bindingen = Waar,
dialect _ opts ={"paramstyle": "named"},
user _ module _ prefix = 'sa.',
inclusief _ object = inclusief _ object
)
|
!!!Informatie U kunt meer lezen over het maken, wijzigen en migreren van tabellen in de documentatie voor het maken van SQL Alchemy-tabellen.