加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

连接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"

这给了我一个’无法请求本地转发’错误.

还有其他方法可以解决这个问题吗?
我有一台装有Python 2.7的Windows 7(x64)机器.请帮我.谢谢.

解决方法

您应该连接到远程服务器并将远程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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读