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

Python使用psycopg2连接PostgreSQL报OperationalError如何解决?

psycopg2连接PostgreSQL抛出OperationalError错误原因及修复方案

错误产生原因

psycopg2.OperationalError属于连接层面的错误,说明客户端无法和PostgreSQL数据库服务建立有效连接,常见触发原因如下:

  • PostgreSQL服务未启动:Windows系统下PostgreSQL默认不会强制开机自启,手动关闭或者重启系统后服务可能处于停止状态
  • 连接参数错误:你指定的database1数据库未创建、postgres用户密码不匹配、PostgreSQL实际监听端口不是默认的5432都可能触发该错误
  • DSN连接串格式不规范:你当前使用的带单引号的DSN串可能出现解析异常
  • 额外隐藏问题:你代码中SQL语句的IF写为了带点的土耳其语字符İ,连接成功后执行SQL也会报错

修复步骤

  • 检查PostgreSQL服务状态
    按下Win+R输入services.msc打开服务管理器,找到名称以postgresql开头的服务,右键选择启动,也可以将启动类型改为自动,避免后续重启系统后重复出现该问题
  • 核对连接参数
    先通过pgAdmin或者psql命令行确认database1数据库已存在、postgres用户密码为postgres123、PostgreSQL监听端口为5432,任意参数不符都修改为实际值
  • 修改代码写法,规避格式问题
    推荐使用关键字参数传递连接配置,同时修正SQL语句的字符错误,修改后代码如下:
import psycopg2

def create_table():
    conn = psycopg2.connect(
        dbname="database1",
        user="postgres",
        password="postgres123",
        host="localhost",
        port="5432"
    )
    cur = conn.cursor()
    # 修正了原代码中土耳其语İ的错误,改为英文IF
    cur.execute("CREATE TABLE IF NOT EXISTS store (item TEXT, quantity INTEGER, price REAL)")
    conn.commit()
    conn.close()

create_table()
  • 排查端口与防火墙拦截
    打开命令提示符执行netstat -ano | findstr "5432",如果没有返回监听记录,说明PostgreSQL未正常启动或者监听端口被修改;如果有监听记录仍然无法连接,可以临时关闭Windows防火墙测试,确认是否为防火墙拦截了数据库连接请求

内容的提问来源于stack exchange,提问作者sinan urgun

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 12:39:01