如何在SQLAlchemy 2.0+的create_engine()中使用PostgreSQL服务定义?
在SQLAlchemy 2.0+中使用PostgreSQL服务定义(pg_service.conf)
要在SQLAlchemy 2.0+的create_engine()中复用pg_service.conf里的服务定义,核心是让SQLAlchemy把service参数传递给底层的psycopg.connect()方法,有两种直接实现方式:
方式一:在连接URL中指定service参数
直接构造包含服务名的URL,适配不同psycopg版本的格式如下:from sqlalchemy import create_engine # 使用psycopg3适配器(对应psycopg[binary]包) engine = create_engine("postgresql+psycopg:///?service=myservice") # 如果是psycopg2适配器,URL格式为 "postgresql+psycopg2:///?service=myservice"方式二:通过connect_args传递参数
若不想在URL中暴露服务名,可通过connect_args参数单独传入:from sqlalchemy import create_engine engine = create_engine( "postgresql+psycopg:///", connect_args={"service": "myservice"} )
验证连接有效性
可以通过查看底层连接对象,确认是否成功加载了指定服务的配置:
with engine.connect() as conn: # 打印底层psycopg连接实例,可直观看到服务对应的数据库、主机等信息 print(conn.connection)
SQLAlchemy的PostgreSQL适配器会完全遵循psycopg对pg_service.conf的查找规则:优先读取用户目录下的~/.pg_service.conf,再读取系统级配置文件。
内容的提问来源于stack exchange,提问作者swiss_knight
相关产品推荐
相关产品推荐

