You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 23:20:27