首页 > 解决方案 > 从 psycopg 连接创建 sqlalchemy 引擎

问题描述

我正在尝试engine使用现有的 psycopg2创建一个 sqlalchemy connection

我的第一种方法是尝试从 psycopg2 连接中提取数据库 URI,但由于安全原因,这失败了:

调用connection.dsn会打印生成连接字符串所需的所有内容,但密码会被混淆:

print(connection.dsn)

用户=my_user 密码=xxx dbname=my_db 主机=localhost 端口=5432

同样,调用connection.get_dsn_parameters()返回一个没有密码的字典。

print(connection.get_dsn_parameters())

{'user':'my_user','dbname':'my_db','host':'localhost','port':'5432','tty':'','options':'','sslmode' :'首选','sslcompression':'0','krbsrvname':'***','target_session_attrs':'任何'}

我还看到,如果我有一个连接池,我可以按照这个 SO answer的方法,但我只有连接。

我想过伪造一个创建者函数,但我很确定如果 sqlalchemy 在内部关闭我的一个连接,这可能会适得其反:

# connection exists in the scope
def get_conn():
  return connection

create_engine('postgresql+psycopg2://', creator=get_conn)

有任何想法吗?

标签: sqlalchemypsycopg2

解决方案


推荐阅读