Wie kann ich Migrationen mit Alembic automatisch generieren und anwenden, wenn die Datenbank in einem Container ausgefühPython

Python-Programme
Anonymous
 Wie kann ich Migrationen mit Alembic automatisch generieren und anwenden, wenn die Datenbank in einem Container ausgefüh

Post by Anonymous »

Ich finde den Arbeitsablauf für die Arbeit mit Datenbankmigrationen in einer Containerumgebung verwirrend. Ich habe eine Web-API mit angehängter Datenbank. Die API läuft in einem Container und die Datenbank in einem anderen. Die Projektdateistruktur ist wie folgt

Code: Select all

.
├── docker-compose.yml
├── Dockerfile
└── app
|    ├── __init__.py
|    ├── database
|    |    ├── alembic/
|    |    ├── __init__.py
|    |    ├── db.py
|    |    └── models.py
|    ├── other
|    ├── source
|    └── files
├── other
└── files
Damit der API-Container auf die Datenbank zugreifen kann, ist sqlalchemy.url in der INI-Datei auf Folgendes gesetzt:

Code: Select all

postgresql://{username}:{password}@db:5432/{database}
Wenn ich jedoch eine Migration durchführen möchte, beispielsweise eine Tabellenspalte hinzufügen möchte, ändere ich das Modell in app/database/models.py, wechsle in das Verzeichnis app/database und führe alembic revision --autogenerate -m "Description" aus. Hier tritt das Problem auf, ich erhalte die Fehlermeldung:

Code: Select all

sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) could not translate host name "db" to address: Name or service not known
Wenn ich den Hostnamen in „localhost“ ändere, funktioniert es, aber dann bricht Docker-Compose ab, da es auf den Containernamen verweisen muss.
Dieser Workflow scheint nicht richtig zu sein. Wie arbeiten Menschen mit Datenbanken in Projekten, die Container verwenden?
Die Datei docker-compose.yml sieht folgendermaßen aus:

Code: Select all

version: "3"

services:
db:
image: postgres
ports:
- "5432:5432"
environment:
- POSTGRES_USER=username
- POSTGRES_PASSWORD=password
- POSTGRES_DB=database

app:
build: .
command: bash -c "cd app/database && alembic upgrade head && cd ../.. && python app/main.py"
volumes:
- .:/code
ports:
- "5000:5000"
depends_on:
- db

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post