pg8000 从 Python 连接 Postgres 的问题

1 投票
1 回答
12854 浏览
提问于 2025-04-18 13:33

我在新系统上连接数据库时遇到了一些麻烦。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'

去掉端口,添加socket超时等等。

当我查看pg8000的core.py代码时,似乎这个错误是来自身份验证错误。如果你深入追查的话。我觉得这个错误(整数和字符串)可能掩盖了身份验证的错误。

消息代码

AUTHENTICATION_REQUEST = b("R")

1 个回答

6

这是一个关于 pg8000 的错误。这个问题在 pg8000-1.9.11 版本中被修复了。这个错误是因为 pg8000 在尝试连接数据库时,报告错误的方式出了问题。

撰写回答