我有一个 ecs 任务,旨在在 aws 中的 aurora serverless v1 上运行数据库架构迁移。根据我见过的大多数示例,通过在 alembic 配置中保存数据库 url 以及用户名和密码来启用连接(https://ahmed-nafies.medium.com/fastapi-with-sqlalchemy-postgresql -and-alembic-and-of-course-docker-f2b7411ee396)。我的 aurora 数据库在 aws Secret Manager 中保存了一个密码。作为初始测试,我将用户名和密码硬编码在数据库 URL 中,并将它们保存在应用程序根目录中的 .env 文件中,如下所示:
DATABASE_URL = postgresql+psycopg2://user:password@host_url:5432/test_db
起初我遇到了插值错误,因为凭据包含百分比符号,所以我在 alembic 目录的 env.py 文件中对 url 进行了编码,如下所示:
db_url_escaped = os.environ["DATABASE_URL"].replace('%', '%%')
config.set_main_option('sqlalchemy.url', db_url_escaped)
这让我克服了插值错误,但随后我收到以下错误,指出我的密码无效:
致命:用户“XXXXX”密码验证失败
我仔细检查了与秘密管理器中保存的密码相同的密码是否被硬编码到 URL 中,并注意到还有其他特殊字符,例如 \ / 和 =。我不确定这是否是导致问题的原因。
有什么方法可以防止这种插值的错误,如果有的话,有人有从秘密管理器检索数据库密码并在 psycopg2 连接字符串中使用它的示例吗?
任何帮助将不胜感激。
我会尝试使用 password=urllib.parse.quote_plus(secret["password"]),并从中删除“+psycopg2” “postgresql+psycopg2://用户:密码@host_url:5432/test_db” 这对我来说就是这样的