Im Zuge der Entwicklung einer REST API mit Python, kommen wir jetzt zu Datenbankmigrationen mit Alembic. Migrationen sind extrem wichtig, wenn du deine Datenbankstruktur im Laufe der Entwicklung ändern willst (z. B. neue Spalten hinzufügen), ohne Daten zu verlieren.
Alembic installieren
pip install alembic
Alembic einrichten
Projekt initialisieren
Im Projektordner:
alembic init alembic
Es entsteht ein Ordner alembic/
+ eine Konfigurationsdatei alembic.ini
.
Konfiguration
-
In
alembic.ini
die Datenbank-URL anpassen:sqlalchemy.url = sqlite:///./users.db
- In
alembic/env.py
dein Datenbankmodell importieren, z. B.:
from myapp.database import Base # <- dein Base aus SQLAlchemy
target_metadata = Base.metadata
So weiß Alembic, welche Tabellen & Modelle existieren.
Erste Migration erstellen
alembic revision --autogenerate -m "create users table"
Alembic schaut sich Base.metadata
an und erstellt ein Migrationsskript in alembic/versions/…py
.
Migration ausführen
alembic upgrade head
Die Tabellen werden in der Datenbank erzeugt.
Beispiel: Spalte hinzufügen
Angenommen, du ergänzt im SQLAlchemy-Modell eine neue Spalte:
class UserDB(Base):
__tablename__ = "users"
id = Column(Integer, primary_key=True, index=True)
name = Column(String, nullable=False)
email = Column(String, unique=True, index=True, nullable=False)
age = Column(Integer, nullable=True) # <-- NEU
Dann:
-
Neue Revision erzeugen:
alembic revision --autogenerate -m "add age column to users"
- Migration anwenden:
alembic upgrade head
Jetzt hat deine Tabelle users
eine zusätzliche Spalte age
.
Best Practices
Immer --autogenerate
nutzen, damit Alembic Änderungen automatisch erkennt.
Vor Deployment: Migrationen in einer Testumgebung prüfen.
In Git mit einchecken → Teammitglieder können DB-Schema synchronisieren.
Niemals direkt an der DB-Struktur schrauben – alles über Migrationen.