据我所知,sqlalchemy允许您设置与连接网址有关的唯一时间是您致电create_engine
时。
我正在使用vault's database secret engine来管理数据库上的短期凭据,这意味着我的应用程序应该足够强大,以便在任何给定时间处理凭据失效。
我不是在寻找如何抓住凭证到期的情况(这似乎是直截了当的)。我想要的是一种替换用于新连接的连接字符串(特别是用户名和密码)的方法。
我考虑过的一个选项就是销毁引擎并重新创建一个新选项,但根据dispose的文档,如果检出任何连接,这似乎可能导致内存泄漏...
是否有人使用的模式/配方,我似乎无法找到?
答案 0 :(得分:3)
我想我已经找到了我忽略的内容:create_engine
调用时可以使用creator回调,让您可以绝对控制所创建的连接。您丢失了对底层dbapi / dialect的ORM抽象,但它允许您根据需要更改连接。
所以我的实现看起来像这样:
import sqlalchemy
import cx_Oracle
def get_new_connection(self):
username, password = get_new_creds_from_vault()
return cx_Oracle.connect(user=username, password=password, dsn='details...')
engine = sqlalchemy.create_engine('oracle://', creator=get_new_connection)
答案 1 :(得分:-1)
sqlalchemy_mate可以减轻您的生活:
from sqlalchemy_mate import EngineCreator
ec = EngineCreator.from_json(
json_file="path-to-json-file",
json_path="credentials.db1", # dot notation json path
)
engine = ec.create_postgresql_psycopg2()
您的凭据
{
"identifier1": {
"host": "example.com",
"port": 1234,
"database": "test",
"username": "admin",
"password": "admin",
},
"identifier2": {
...
}
}