Psycopg2: 'module'对象没有'connect'属性。

7

我正在尝试使用psycopg2连接到一个PostgreSQL数据库:

import psycopg2

try:
    conn = psycopg2.connect("dbname='puppetdb' user='puppetdb' host='172.17.0.1' port='5432' password='puppetdb'")
except Exception, e:
    print "I am unable to connect to the database"
    print e

返回结果如下:

I am unable to connect to the database
'module' object has no attribute 'connect'

我已经确保使用pip install psycopg2安装了psycopg2,并且根据文档,这应该可以正常工作。

我做错了吗?


1
在我的情况下,用户没有对安装了 psycopg2/usr/local/lib 有读取权限。使用 sudo 运行或修复 /usr/local/lib 的权限可以解决问题。 - dsclose
这真的很奇怪。 - Andy Hayden
@dsclose,这也解决了我的问题。 - geek2000
3个回答

12

可能是名称遮蔽问题。

如果您的文件名为psycopg2.py,或者在该目录中有一个psycopg2.py/psycopg2.pyc文件,则它将导入您的脚本而不是实际的pyscopg2模块。

如果这是问题所在,请将您的文件重命名为其他名称。


请注意,在我的情况下,我本地有一个json.py文件,似乎psycopg2在内部引用它,因此也导致了这个问题。 - Eduardo

12

对我来说,问题出在我上传zip文件到AWS Lambda时没有递归压缩文件夹,即使用了zip lambda.zip *而不是zip -r lambda.zip *。因此,模块文件夹为空。


-1
import psycopg2               # Acc�s PostgreSQL
import psycopg2.extras        # Goodies PostgreSQL

try:
     conn = psycopg2.connect("dbname='puppetdb' user='puppetdb' 
host='172.17.0.1' port='5432' password='puppetdb'")

except psycopg2.Error as e:
    print("I am unable to connect to the database")
    print(e)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接