如何处理sqlalchemy + psycopg2中不断变化的密码?

Jay*_*Eye 3 python postgresql sqlalchemy amazon-web-services amazon-aurora

我继承了一些将sqlalchemy与psycopg2一起使用的代码,该代码需要在AWS上运行。RDS Postgres支持基于Iam的身份验证,但这样做的方式相当笨拙:您使用AWS RDS API请求一个临时密码,该密码的有效时间约为15分钟,然后将其作为密码传递。

我有效地执行了代码e = create_engine(make_sqlalchemy_string()),在其中make_sqlalchemy_string()进行aws api调用,获取了临时密码,并且一切正常。除了什么以外,sqlalchemy代码中的某处关闭了连接,然后密码不再有效。是否已经有一种方法可以使sqlalchemy每次需要重新连接时都请求一个新的连接字符串?

我可以想到许多解决方法,但是都不是令人满意的方法。是否有实现这一目标的标准方法?

谢谢

Ilj*_*ilä 5

一种方法是使用以下creator参数create_engine()

创建者 –一个可调用的返回DBAPI连接的对象。此创建功能将传递到基础连接池,并将用于创建所有新的数据库连接。使用此功能会使URL参数中指定的连接参数被忽略。

只需修改make_sqlalchemy_string()即可产生的dsn参数psycopg2.connect(),这可能意味着由于已接受的连接字符串格式根本不必修改它,并传递创建者:

create_engine('postgresql://', creator=lambda: psycopg2.connect(make_dsn_string()))
Run Code Online (Sandbox Code Playgroud)