我遇到了一个奇怪的问题,我无法从Python 3.2安装连接到PostgreSQL。我正在运行Fedora 15并使用yum从Fedora存储库安装了Python3和PostgerSQL9。有没有人对我为什么会看到这个问题以及如何纠正它有任何想法?谷歌搜索没有发现任何事情。
我已经更改了用户名,密码和数据库,但我的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
连接字符串而不是关键字,那么我会得到同样的错误,无论是localhost还是remote主机。
答案 0 :(得分:4)
我认为这可能是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')]
>>>
答案 1 :(得分:0)
只是一个猜测,但是python可能正在将unicode传递给postgres并且它正在期待字符串。
答案 2 :(得分:0)
您还可以使用另一个模块 - psycopg2连接到postgresql