连接postgres和Python
发布时间:2020-12-20 13:47:19 所属栏目:Python 来源:网络整理
导读:我在远程主机上有一个数据库.当我使用putty和SSH时,我能够访问它.数据库本身没有密码.只有SSH连接有密码.但是,当我尝试使用 Python连接它时,它会要求输入密码.我是postgres和paramiko的新手. 这是我尝试过的: import psycopg2import paramikoimport timet =
我在远程主机上有一个数据库.当我使用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" 这给了我一个’无法请求本地转发’错误. 还有其他方法可以解决这个问题吗? 解决方法
您应该连接到远程服务器并将远程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执行此操作的示例 注意:端口转发是阻止操作.因此,您必须在单独的线程/进程中启动端口转发. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |