从python3.4连接到远程MySQL数据库

2024-10-02 10:21:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图使用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}$

提前谢谢。在


Tags: key数据库closedb远程remotemydef
1条回答
网友
1楼 · 发布于 2024-10-02 10:21:52

回答我自己的问题是因为,在J.M.Fernández关于Github的大量帮助下,我有了一个解决方案:我最初复制的示例使用端口3308,但端口3306是标准。一旦我改变了这个,它就开始工作了。在

相关问题 更多 >

    热门问题