我试图使用python3.4同时连接到两个MySQL数据库(一个本地数据库,一个远程数据库),但我真的很挣扎。把问题分成三个部分:第一步:连接到本地数据库。这个很好用
使用PyMySQL。(MySQLdb与python3.4,of
当然。)
第2步:连接到远程数据库(需要
使用SSH)。我可以在Linux命令提示符下运行它,但不能
从Python。。。见下文。在
第3步:在
同一时间。我想我应该用另一个端口
远程数据库以便我可以同时拥有两个连接
但我在这里已经力不从心了!如果这是相关的,那么两个DBs将
有不同的名字。如果这个问题不是直接相关的,
请告诉我,我会分开邮寄的。在
不幸的是,对于新手来说,我开始的地方不太合适。。。一旦我能让这个工作起来,我可以很高兴地回到基本的Python和SQL,但希望有人会同情我,并帮助我开始!在
对于第2步,我的代码如下。它似乎非常接近回答这个问题的sshtunnel示例,尽管它使用MySQLdb。目前我正在嵌入连接参数-一旦它正常工作,我将把它们移到配置文件中。在import dropbox, pymysql, shlex, shutil, subprocess
from sshtunnel import SSHTunnelForwarder
import iot_config as cfg
def CloseLocalDB():
localcur.close()
localdb.close()
def CloseRemoteDB():
# Disconnect from the database
# remotecur.close()
# remotedb.close()
# Close the SSH tunnel
# ssh.close()
print("end of CloseRemoteDB function")
def OpenLocalDB():
global localcur, localdb
localdb = pymysql.connect(host=cfg.localdbconn['host'], user=cfg.localdbconn['user'], passwd=cfg.localdbconn['passwd'], db=cfg.localdbconn['db'])
localcur = localdb.cursor()
def OpenRemoteDB():
global remotecur, remotedb
with SSHTunnelForwarder(
('my_remote_site', 22),
ssh_username = "my_ssh_username",
ssh_private_key = "/etc/ssh/my_private_key.ppk",
ssh_private_key_password = "my_private_key_password",
remote_bind_address = ('127.0.0.1', 3308)) as server:
remotedb = None
#Following line gives an error if uncommented
# remotedb = pymysql.connect(host='127.0.0.1', user='remote_db_user', passwd='remote_db_password', db='remote_db_name', port=server.local_bind_port)
#remotecur = remotedb.cursor()
# Main program starts here
OpenLocalDB()
CloseLocalDB()
OpenRemoteDB()
CloseRemoteDB()
这是我得到的错误:
^{pr2}$
提前谢谢。在