我正在尝试连接到一个需要代理(socks)才能连接的数据库,如果我手动使用代理连接,我可以连接,但是我需要让脚本连接到机器的proxy (socks)来生成这个SELECT。
脚本
import socket
import socks
import requests
import pymssql
socks.set_default_proxy(socks.SOCKS5, "138.34.133.155", 1080, True, 'user','password')
socket.socket = socks.socksocket
server = '172.43.56.89'
username = 'user'
password = 'password'
database = 'dbname'
conn = requests.get(pymssql.connect(host=server,user=username,password=password,database=database))
cursor = conn.cursor()
cursor.execute("SELECT column FROM table")
row = cursor.fetchall()
conn.close()
for i in row:
print(i)输出
追溯(最近一次调用):文件"connection.py",第15行,在conn = requests.get( pymssql.connect (host=server,user=username,password=password,database=database))文件"src\pymssql.pyx“中,第642行,在pymssql.connect pymssql.OperationalError中:(20009,'DB-Lib错误消息20009,严重性9:\n无法连接: Adaptive不可用或不存在(172.43.56.89:1433)\n nNet在未知错误(10060)\n‘中的Lib错误
发布于 2019-10-28 22:57:55
我认为一种选择是安装一个带有端口转发的本地隧道sock,映射您的数据库端口,并将您的服务器设置为本地服务器。
如果您在Unix计算机上运行python脚本,那么它是非常有效的。
类似于这样的系统调用(对于3306 mariaDB):
ssh -L 3306:localhost:3306 user@x.x.x.x首先,运行SSH,然后告诉他启用从3306端口转发到通过user@IP连接的服务器的localhost:3306端口的端口。
这样,您的local machine:3306中的每个查询都将发送到您的MariaDB:3306服务器,使您可以像在服务器上的位置一样使用它。
https://stackoverflow.com/questions/58525651
复制相似问题