小编Hun*_*er2的帖子

当数据库在容器中运行时,如何使用 alembic 自动生成并应用迁移?

我发现在容器化环境中处理数据库迁移的工作流程令人困惑。我有一个带有附加数据库的 Web API。API 在一个容器中运行,数据库在另一个容器中运行。项目文件结构如下

\n
.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 docker-compose.yml\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Dockerfile\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 app\n|    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n|    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 database\n|    |    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 alembic/\n|    |    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n|    |    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 db.py\n|    |    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 models.py\n|    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 other\n|    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 source\n|    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 files\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 other\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 files\n
Run Code Online (Sandbox Code Playgroud)\n

为了使 API 容器能够访问数据库,ini 文件中的 sqlalchemy.url 设置为:

\n

postgresql://{username}:{password}@db:5432/{database}

\n

但是,当我想要进行迁移时,例如添加表列,我会将app/database/models.py更改目录中的模型更改为app/database并运行alembic revision --autogenerate -m "Description"。这就是问题发生的地方,我收到错误:

\n
sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) could not translate host name "db" to address: Name or service not known\n
Run Code Online (Sandbox Code Playgroud)\n

如果我将主机名更改为 localhost,它可以工作,但 docker-compose 会中断,因为它必须引用容器名称。

\n

这个工作流程似乎不正确。人们如何在使用容器的项目中使用数据库?

\n

docker-compose.yml …

python sqlalchemy alembic docker

8
推荐指数
1
解决办法
2万
查看次数

标签 统计

alembic ×1

docker ×1

python ×1

sqlalchemy ×1