有没有办法更新sqlalchemy引擎上的连接凭据?

有没有办法更新sqlalchemy引擎上的连接凭据?,sqlalchemy,hashicorp-vault,Sqlalchemy,Hashicorp Vault,据我所知,sqlalchemy允许您设置与连接url相关的唯一时间是在调用create\u engine时 我正在使用来管理数据库上的短期凭据,这意味着我的应用程序应该足够健壮,可以在任何给定时间处理凭据失效 我不是在寻找如何抓住凭据即将过期的情况(这似乎是直截了当的)。我想要的是替换用于新连接的连接字符串(特别是用户名和密码)的方法 我考虑过的一个选择是销毁引擎并重新创建一个新引擎,但根据的文档,如果有任何连接被检出,这似乎可能会导致内存泄漏 是否有一种我似乎找不到的人们使用的模式/配方?我想

据我所知,sqlalchemy允许您设置与连接url相关的唯一时间是在调用
create\u engine

我正在使用来管理数据库上的短期凭据,这意味着我的应用程序应该足够健壮,可以在任何给定时间处理凭据失效

我不是在寻找如何抓住凭据即将过期的情况(这似乎是直截了当的)。我想要的是替换用于新连接的连接字符串(特别是用户名和密码)的方法

我考虑过的一个选择是销毁引擎并重新创建一个新引擎,但根据的文档,如果有任何连接被检出,这似乎可能会导致内存泄漏


是否有一种我似乎找不到的人们使用的模式/配方?

我想我已经找到了我忽略的东西:调用
create\u engine
时有一个回调函数,可以让您绝对控制所创建的连接。您失去了对底层dbapi/方言的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)
可以缓解您的生活:

来自sqlalchemy\u mate导入引擎Creator的

ec=EngineCreator.from_json(
json_file=“json文件的路径”,
json_path=“credentials.db1”,#点符号json路径
)
engine=ec.create_postgresql_psycopg2()
你的证件

{
“标识符1”:{
“主机”:“example.com”,
“端口”:1234,
“数据库”:“测试”,
“用户名”:“管理员”,
“密码”:“管理员”,
},
“标识2”:{
...
}
}

但当您的json凭据文件中的用户名和密码无效并需要替换时,这对我有何帮助?而无需重新启动创建引擎的过程?我知道这是一个很老的问题,但是你能详细说明一下你所说的
是什么意思吗?你失去了对底层dbapi/方言的ORM抽象吗?
?我不记得我当时到底在想什么,所以我不会更新答案。。。首先,我想我的意思是sqlalchemy文档所说的:
“使用此函数会导致绕过URL参数中指定的连接参数。”
我怀疑我不确定更改连接对方言调整有什么影响,可能会影响ORM的操作方式。例如,如果默认的cx_Oracle方言(我在我的示例中使用)依赖于在连接后立即发送给Oracle的指令,以促进与联接相关的操作。效果很容易因数据库而异。