2011-07-13 28 views
2

我遇到了一个奇怪的问题,我无法从Python 3.2安装连接到PostgreSQL。我正在运行Fedora 15,并使用yum从Fedora存储库安装了Python3和PostgerSQL9。有没有人有任何想法,为什么我看到这个问题,以及如何纠正?谷歌搜索没有发现任何东西。无法打开从Python3到PostgreSQL的连接

我已经改变了用户名,密码和数据库,但我的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:[email protected]/database连接字符串,而不是关键字,既为本地主机和远程主机。

回答

4

我认为这可能是在python3-postgresql包中的一些错误,但它看起来变化不大的工作。编辑这个文件(可能/usr/lib64 64位安装):

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

变化(线514):

element.Startup(**startup), password 

到:

element.Startup(startup), password 

之后,我做了简单的连接(我改变pg_hba.conf主机的方法来MD5),它看起来OK:

[[email protected] 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:[email protected]/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')] 
>>> 
+0

这样做,谢谢! – thetaiko

0

只是一个猜测,但蟒蛇可能是路过的Unicode给Postgres并且它预计字符串。

+0

感谢您的答复。经过多一点研究,我猜测这是由Python3.1升级到Python3.2所导致的不兼容性。我希望找到遇到同样问题并且知道简单解决方案的人。我想重新编译Python3.1值得一试。 – thetaiko

+0

是的,先生。这在v1.0.2中得到了修复:“为Python3.2的no non-str()关键字修复Startup()。” – jwp