python - 无法从 Python3 打开到 PostgreSQL 的连接

标签 python postgresql python-3.x py-postgresql

我遇到了一个奇怪的问题,无法从 Python 3.2 安装连接到 PostgreSQL。我正在运行 Fedora 15,并使用 yum 从 Fedora 存储库安装了 Python3 和 PostgerSQL9。有谁知道我为什么会看到这个问题以及如何纠正它? Google 搜索没有发现任何结果。

我已更改用户名、密码和数据库,但我的 pg_hba.conf 文件是正确的。

import postgresql
t = postgresql.open(user='validuser', password='secret', database='some_database')

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib64/python3.2/site-packages/postgresql/__init__.py", line 88, in open
    c.connect()
  File "/usr/lib64/python3.2/site-packages/postgresql/driver/pq3.py", line 2419, in connect
    pq = Connection3(sf, startup, password = password,)
  File "/usr/lib64/python3.2/site-packages/postgresql/protocol/client3.py", line 514, in __init__
    element.Startup(**startup), password
TypeError: keyword arguments must be strings

顺便说一句,如果我尝试使用不同的用户、密码、数据库组合进行连接,或者使用 pq://user:password@host/database 连接字符串而不是关键字,无论是到本地主机还是到远程主机。

最佳答案

我认为这可能是 python3-postgresql 中的一些错误包,但看起来只需稍加修改即可工作。编辑此文件(对于 64 位安装,可能是 /usr/lib64):

/usr/lib/python3.2/site-packages/postgresql/protocol/client3.py

更改(第 514 行):

element.Startup(**startup), password

至:

element.Startup(startup), password

之后我进行了简单的连接(我将 pg_hba.conf 主机方法更改为 md5),看起来不错:

[grzegorz@localhost Desktop]$ python3
Python 3.2 (r32:88445, Feb 21 2011, 21:12:33) 
[GCC 4.6.0 20110212 (Red Hat 4.6.0-0.7)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import postgresql
>>> db = postgresql.open("pq://grzegorz:12345@localhost/grzegorz")
>>> ps = db.prepare("SELECT version()")
>>> ps()
[('PostgreSQL 9.0.4 on i386-redhat-linux-gnu, compiled by GCC gcc (GCC) 4.6.0 20110530 (Red Hat 4.6.0-9), 32-bit',)]
>>> ps = db.prepare("TABLE t")
>>> ps()
[(1, 'aaa'), (2, 'bbb'), (3, 'ccc')]
>>>

关于python - 无法从 Python3 打开到 PostgreSQL 的连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6685277/

相关文章:

Python正则表达式从末尾匹配mac地址?

linux - 在 CentOS 8 中从 pgdg 存储库安装 postgresql12-server 后找不到 pg_ctl

php - 在 PostgreSQL 中存储类似 BLOB 的数据

python - While 循环导致 Tkinter Canvas 无法工作

python - 卸载包时如何自动删除pipenv中的依赖Python包?

Python 循环遍历 txt 文件来创建和合并 Pandas Dataframes

python - (Python贪吃蛇游戏)for循环不画蛇

python - 为什么在不同的 IDLE 中使用转义序列得到不同的输出?

postgresql - 尝试创建 Postgres 函数

python - Django ORM : Implement Pre-save for a "Field" instead of a "Model"