即使 Postgre 服务器正在授权连接,我的 python 脚本也会引发“psycopg2.OperationalError:fe_sendauth:未提供密码”错误。
我使用的是 Python 3.5、psycopg2、Postgre 9.5,密码存储在 .pgpass 文件中。该脚本是使用 Flask-restful 的 Restful Flask 应用程序的一部分。该脚本与 Postgre 服务器在同一主机上运行。
我调用连接函数如下:
conn_admin = psycopg2.connect("dbname=database user=username")
当我执行脚本时,我得到以下堆栈跟踪:
File "/var/www/flask/content_provider.py", line 84, in get_report
conn_admin = psycopg2.connect("dbname=database user=username")
File "/usr/local/lib/python3.5/dist-packages/psycopg2/__init__.py", line 130, in connect
conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
psycopg2.OperationalError: fe_sendauth: no password supplied
但是,当我查看 Postgre 服务器日志时,我看到以下内容(我启用了记录器以显示所有连接请求):
2019-01-04 18:28:35 SAST [17736-2] username@database LOG: connection authorized: user=username database=database
此代码在我的开发 PC 上运行良好,但是当我将其放到 Unbuntu 服务器上时,我开始遇到此问题。
为了尝试找到问题,我已将密码硬编码到连接字符串中,但仍然遇到相同的错误。
如果我直接在主机上的 Python 终端中执行上述行,无论连接字符串中是否有密码,它都可以正常工作。
编辑: 我注意到的一件事是,在桌面上我使用 Python 3.6.2,而在服务器上我使用 Python 3.5.2。
尝试添加主机:
conn_admin = psycopg2.connect("dbname=database user=username host=localhost")
尝试添加密码 ie conn = psycopg2.connect("dbname=数据库用户=用户名主机=本地主机密码=密码")
我遇到了以下类似的错误:
psycopg2.OperationalError:连接到“localhost”(::1)的服务器,端口 5432 失败:fe_sendauth:未提供密码
因为我没有设置
password
如下图:
conn = psycopg2.connect(database='postgres', user='postgres')
所以,我把
password
如下图所示,然后错误就解决了:
conn = psycopg2.connect(database='postgres', user='postgres', password='admin')