来自python的pg8000 postgres连接问题

Posted

技术标签:

【中文标题】来自python的pg8000 postgres连接问题【英文标题】:pg8000 postgres connection issues from python 【发布时间】:2014-09-07 04:57:38 【问题描述】:

我无法连接到新系统上的数据库。 Python的版本是一样的。这是那里的数据库的连接字符串,您会看到错误消息发生变化,但我无法弄清楚为什么当连接字符串正确时出现以下错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/dist-packages/pg8000/__init__.py", line 148, in connect
    user, host, unix_sock, port, database, password, socket_timeout, ssl)
  File "/usr/local/lib/python2.7/dist-packages/pg8000/core.py", line 1157, in __init__
    raise exc_info()[1]
TypeError: cannot concatenate 'str' and 'int' objects

这是我正确的连接字符串:

conn = DBAPI.connect(host='sql2', user='XXX', password='XX', database='XX', socket_timeout=100, port=5432)

当我更改为不正确的内容时:

conn = DBAPI.connect(host='sql2', user='XXX', password='XX', database='XX', socket_timeout=100, port=100)

以及以下错误信息:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/mnt/opt/Centos5.8/python-2.7.4_scipy0.13/lib/python2.7/site-packages/pg8000/__init__.py", line 148, in connect
    user, host, unix_sock, port, database, password, socket_timeout, ssl)
  File "/mnt/opt/Centos5.8/python-2.7.4_scipy0.13/lib/python2.7/site-packages/pg8000/core.py", line 854, in __init__
    raise InterfaceError("communication error", exc_info()[1])
pg8000.errors.InterfaceError: ('communication error', error(111, 'Connection refused'))

我无法弄清楚此错误消息的来源 - 看起来很奇怪。我试过了:

str() 中包装字符串 把u'ss' 删除端口,添加套接字超时等。

当我查看来自 pg8000 的 core.py 代码时,如果你追查它,这似乎来自身份验证错误。我认为这个错误(int 和 str)可能会掩盖身份验证错误。

消息代码

AUTHENTICATION_REQUEST = b("R")

【问题讨论】:

您是否尝试过将socket_timeoutport 值分别包装在str() 中? @TheSoundDefense,需要 socket_timeout 和端口作为整数 - 我尝试包装。主机=str(dbsettings['host']),user=str(dbsettings['user']),password=str(dbsettings['password']),database=str(dbsettings['database']),port= dbsettings['port'], ssl=dbsettings['ssl'] 【参考方案1】:

这是bug in pg8000。它是fixed in pg8000-1.9.11。该错误是报告pg8000在尝试对数据库进行身份验证时遇到的错误。

【讨论】:

我更改为更新后的代码,现在我得到一个正确的错误:pg8000.errors.InterfaceError: pg8000 不支持身份验证方法 3。 方法三是明文密码认证。我认为pg8000应该支持它,所以我在github.com/mfenniak/pg8000/issues/52创建了一个功能请求。

以上是关于来自python的pg8000 postgres连接问题的主要内容,如果未能解决你的问题,请参考以下文章

postgres pg8000 创建数据库

带有 pg8000 的 PostgreSQL - 从 SQL 插入结果到另一个表

云运行连接到云SQL模块错误Python

无法通过 python 通过 SSH 连接到 postgres 服务器

无法使用pg_connect将php连接到postgres数据库

pg Admin 4 - 尝试连接到 PostgreSQL 13 服务器时“postgres”用户的密码