py-postgresql连接Docker部署的PostgreSQL14出现AuthenticationMethodError错误
问题根因
你遇到的报错核心原因是 py-postgresql==1.2.2 版本停止更新时间较早,不支持 PostgreSQL 10 及以上版本默认启用的 scram-sha-256 密码认证机制:报错信息里的 unsupported authentication request '<unknown>'(10) 中的类型码10就是 scram-sha-256 认证的官方标识,该驱动仅支持MD5、crypt、明文、trust四种认证方式,和日志提示完全匹配。
另外你给出的测试代码存在笔误:postgressql.open 多写了一个s,正确写法应为 postgresql.open,可先修正笔误后再验证。
解决方案
方案1:修改PostgreSQL配置兼容旧驱动(临时适配)
适合暂时不想替换驱动的场景,操作步骤如下:
- 进入Docker部署的PostgreSQL容器,修改
postgresql.conf配置文件:
# 将默认的password_encryption参数值从scram-sha-256改为md5 password_encryption = md5
- 重启PostgreSQL服务使配置生效
- 重新设置数据库用户密码,新密码会自动以MD5格式存储:
ALTER ROLE postgres WITH PASSWORD '你的原密码';
- 修改
pg_hba.conf配置文件,将对应连接段的认证方式从scram-sha-256改为md5:
# 示例对应本地连接的规则,可根据你的实际访问来源调整 host all all 127.0.0.1/32 md5
- 执行
pg_ctl reload重载配置后,即可用py-postgresql正常连接。
方案2:替换为仍在维护的PostgreSQL Python驱动(推荐)
py-postgresql已多年未更新迭代,建议替换为更稳定、兼容性更好的驱动:
- 同步场景推荐使用
psycopg2-binary,安装和连接示例:
pip install psycopg2-binary
import psycopg2 conn = psycopg2.connect( host="localhost", port=5432, user="postgres", password="你的密码", database="postgres" )
- 异步场景推荐使用
asyncpg。
内容的提问来源于stack exchange,提问作者Steven Ensslen
相关产品推荐
相关产品推荐

