sqlalchemy.engine.URL.create连接PostgreSQL的有效query键说明
回答
你参考的MSSQL示例里的odbc_connect是pyodbc驱动专属的特殊query键,仅适用于走ODBC协议的连接场景,PostgreSQL的psycopg2驱动没有对应的单键传入完整连接串的设计,不需要硬找替换值。
1. PostgreSQL(psycopg2驱动)query参数常用合法键值
query字典里的键值对会直接透传给psycopg2驱动用于连接配置,常用的有效配置如下:
sslmode:SSL连接验证模式,可选值为disable/allow/prefer/require/verify-ca/verify-full,默认值为prefersslcert/sslkey/sslrootcert:分别对应客户端证书、客户端私钥、服务端根证书的本地文件路径,开启强SSL校验时使用application_name:连接标识,配置后会在PostgreSQL的pg_stat_activity系统视图中显示,方便排查连接来源connect_timeout:连接超时时间,传字符串格式的正整数,单位为秒options:发送给PostgreSQL服务端的启动参数,比如要指定默认schema搜索路径,可以传-c search_path=custom_schema,publictarget_session_attrs:PostgreSQL 10+版本支持的连接路由参数,传read-write时会自动校验连接到的节点是否为可写主库,适合高可用部署场景使用
可直接运行的配置示例:
from sqlalchemy.engine import URL from sqlalchemy import create_engine conn_url = URL.create( drivername="postgresql+psycopg2", username="your_db_user", password="your_db_password", host="your.db.host", port=5432, database="your_target_db", query={ "sslmode": "require", "application_name": "your_app_name", "connect_timeout": "5", "options": "-c search_path=biz_schema,public" } ) engine = create_engine(conn_url)
如果你需要直接传入完整连接串,不需要走URL.create构造,直接把标准PostgreSQL连接串传给create_engine即可,效果和URL构造完全一致。
2. query参数合法配置的权威查询渠道
query参数没有全局统一的合法键列表,所有参数都是透传给对应数据库方言和底层DBAPI使用的,按两个路径查就能拿到完整的合法配置:
- 首先查SQLAlchemy对应数据库方言的官方文档:每个方言的文档页会明确列出SQLAlchemy层做了特殊处理的query参数,比如PostgreSQL psycopg2方言的文档会标注
sslmode等参数的特殊处理逻辑 - 其次查底层使用的DBAPI库的官方连接参数文档:只要是该DBAPI支持从URL查询字符串中解析的连接参数,都可以直接放到
query字典中传递。注意所有传入query的值必须是字符串类型,非字符串类型的连接参数不要放在这里,统一通过create_engine的connect_args参数传入。
内容的提问来源于stack exchange,提问作者Galen
相关产品推荐
相关产品推荐

