如何在psycopg中声明连接信息?ConnectionInfo类使用方法咨询
关于Psycopg连接信息与连接管理的问题解答
一、在Psycopg中声明连接信息
Psycopg支持多种方式声明连接信息,覆盖Psycopg2和Psycopg3两个版本:
- 直接在
connect()方法中传入参数# Psycopg2 import psycopg2 conn = psycopg2.connect( dbname="your_db", user="your_user", password="your_pwd", host="localhost", port="5432" ) # Psycopg3 import psycopg conn = psycopg.connect( dbname="your_db", user="your_user", password="your_pwd", host="localhost", port="5432" ) - 使用DSN字符串(两个版本通用)
conn = psycopg2.connect("dbname=your_db user=your_user password=your_pwd host=localhost port=5432") - 借助环境变量自动读取
PostgreSQL的标准环境变量(如PGDATABASE、PGUSER、PGPASSWORD等)会被Psycopg自动识别,无需显式传入参数:import os os.environ["PGDATABASE"] = "your_db" os.environ["PGUSER"] = "your_user" conn = psycopg2.connect() # 自动读取环境变量完成连接
二、连接管理与查看功能
Psycopg本身没有像pg_hero那样的全局连接管理/监控功能,它专注于单连接的创建、操作与关闭。如果要查看数据库的所有连接状态,需要直接查询PostgreSQL的系统视图pg_stat_activity——这也是pg_hero底层依赖的数据源:
import psycopg2 conn = psycopg2.connect(...) cur = conn.cursor() cur.execute(""" SELECT pid, datname, usename, client_addr, state, query FROM pg_stat_activity WHERE datname = 'your_db'; """) for row in cur.fetchall(): print(row) cur.close() conn.close()
至于类似Metabase发送连接标识的能力,Psycopg支持通过application_name参数自定义连接的应用标识,这样在pg_stat_activity中可以快速识别该连接的来源:
conn = psycopg2.connect( dbname="your_db", user="your_user", application_name="MyPsycopgApp" # 自定义应用名称,便于监控识别 )
三、psycopg2.extensions.ConnectionInfo类的使用示例
ConnectionInfo是Psycopg2中用于获取已建立连接元信息的工具类,通过连接对象的info属性即可获取实例,调用其方法或属性即可查看连接细节:
import psycopg2 from psycopg2.extensions import ConnectionInfo conn = psycopg2.connect(dbname="your_db", user="your_user") info = conn.info # 获取ConnectionInfo实例 # 查看基础连接信息 print("数据库名称:", info.dbname) print("登录用户名:", info.user) print("主机地址:", info.host) print("端口:", info.port) print("PostgreSQL服务器版本:", info.server_version) print("当前应用标识:", info.application_name) # 获取完整连接参数字典 full_params = info.get_params() print("完整连接参数:", full_params) conn.close()
注意:ConnectionInfo是只读的,仅能查看连接信息,无法修改已建立连接的参数。
内容的提问来源于stack exchange,提问作者javadfarah
相关产品推荐
相关产品推荐

