连接PostgreSQL和Python

4

我有一个远程主机上可用的数据库。当我使用putty和SSH时,我可以访问它。数据库本身没有密码。只有SSH连接有密码。但是,当我尝试使用Python连接时,它会要求密码。我对Postgres和Paramiko都不熟悉。

这是我尝试过的:

import psycopg2
import paramiko
import time
t = paramiko.Transport(('xxx.com', 22))
t.connect(username="xxx", password='xxx') 
c = paramiko.Channel(t)
conn = psycopg2.connect("dbname='xxx'")
curs = conn.cursor()
sql = "select * from xxx"
curs.execute(sql)
rows = curs.fetchall()
print(rows)

我尝试的另一种方法是:

import os, psycopg2
os.system("ssh xxx@xxx.com -fNL 5432:localhost:5432 -p 22")
while True:
    try:
        conn = psycopg2.connect("dbname='xxx'")
        curs = conn.cursor()
        sql = "select * from xxx"
        curs.execute(sql)
        rows = curs.fetchall()
        print(rows)
    except:
        print "I am unable to connect to the database"

这给了我一个“无法请求本地转发”的错误。 是否有其他方法可以解决这个问题? 我有一个装有Python 2.7的Windows 7(x64)机器。请帮帮我。谢谢。

可能是重复的问题:使用pgadmin连接远程服务器 - Brent Washburne
看起来您通过更改端口号成功连接了。这是 http://stackoverflow.com/questions/17937615/connecting-to-remote-server-with-pgadmin 的重复吗? - Brent Washburne
1个回答

1
你需要连接到远程服务器并将远程的PostgreSQL端口转发到本地端口。 没有paramiko,可以这样做:
# start port forwarding
$ ssh -L PGSQL_LOCAL_PORT:localhost:PGSQL_REMOTE_PORT user@xxx.com
# in python
psycopg.connect("dbname='xxx' host='localhost' port='PGSQL_LOCAL_PORT'")

这里有一个使用paramiko进行此操作的示例
https://code.ros.org/trac/wg-ros-pkg/browser/pkg/trunk/paramiko/demos/forward.py?rev=30

注意:端口转发是阻塞操作,因此您必须在单独的线程/进程中启动端口转发。

我也尝试了转发,但是没有成功。我不确定自己犯了什么错误。我已经修改了我的问题。 - GobSmack
1
奇怪。这对我有效。 你尝试过使用不同的本地端口吗?你可以检查远程端口是否正确。我记得,PostgreSQL 的默认端口是 5433。ssh -L 14141:localhost:5433 myuser@myserver #.... psycopg2.connect("dbname='my' host='localhost' port='14141' user='myuser' password='*******") - Akisame
哎呀,终于成功连接到SSH了!但是对于数据库而言,我却遭遇到了“连接被拒绝”的错误 :( - GobSmack
你在使用psycopg2连接时遇到了这个错误吗? - Akisame
当您创建数据库(在PostgreSQL中)时,当前用户自动成为数据库的所有者。 PostgreSQL中的默认用户是postgres。 您可以为数据库创建新用户(我强烈建议这样做),或者您可以更改postgres密码。您可以查看此要点 https://gist.github.com/Alexx-G/e79e477a1d32cd768d3b - Akisame
显示剩余2条评论

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