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

标签 sqlalchemy hashicorp-vault

据我所知,sqlalchemy 唯一一次允许您设置与连接 URL 相关的任何内容是在您调用 create_engine 时。

我正在使用vault's database secret engine管理数据库上的短期凭据,这意味着我的应用程序应该足够强大,可以在任何给定时间处理凭据失效。

我并不是在寻找如何捕获凭证过期的情况(这似乎很简单)。我想要的是一种替换用于新连接的连接字符串(特别是用户名和密码)的方法。

我考虑过的一个选择是销毁引擎并重新创建一个新引擎,但基于 dispose 的文档,如果检查了任何连接,这似乎可能会导致内存泄漏...

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

最佳答案

我想我已经找到了我所忽略的内容:有一个 creator调用 create_engine 时提供回调,让您可以绝对控制所创建的连接。您失去了底层 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)

关于sqlalchemy - 有没有办法更新 sqlalchemy 引擎上的连接凭据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48627594/

相关文章:

spring - 使用保管库保护 Spring Cloud 配置凭据

kubernetes - Kubernetes 上的 CA 证书和 JWT token

python - 将 SQL 记录从一个数据库插入到第二个数据库(其中第二个数据库有一个附加列)

python - 哪个 Python (sqlalchemy) mssql DB API 在 Cygwin 中工作?

python - 解析 sqlalchemy 存储过程执行的结果

sql-server - 通过 sqlalchemy 和 pyodbc 访问 MS SQL 数据库时出现 "Login timeout expired"错误

google-cloud-platform - 有没有办法在 GCP 中存储 secret ,类似于 Azure 保管库?

python - 对复合 sqlalchemy 查询的顺序有任何性能影响吗?

google-cloud-platform - 在 Google Cloud Functions 中使用 Hashicorp Vault 的最佳方式是什么?

authentication - 有没有办法允许用户在 Hashicorp 的 Vault UI 上更改自己的密码