通过 SSH 连接到远程 mysql 时,Python mysql-connector 无限期挂起

use*_*538 8 python mysql ssh pymysql

我正在使用 python 测试与 mysql 服务器的连接。我需要 ssh 进入服务器并建立 mysql 连接。以下代码有效:

from sshtunnel import SSHTunnelForwarder
import pymysql
import mysql.connector
    
with SSHTunnelForwarder((ssh_host, 22), ssh_username=ssh_user, ssh_password=ssh_password,
            remote_bind_address=("127.0.0.1", 3306)) as tunnel:

    config = {
                    'user': user,
                    'password': password,
                    'host': tunnel.local_bind_host,
                    'port': tunnel.local_bind_port,
                    'database': db
                }
    
    conn = pymysql.connect(**config)
    query = '''SELECT VERSION();'''
    data = pd.read_sql_query(query, conn)
    print(data)
    connection.close()
Run Code Online (Sandbox Code Playgroud)

但是,当使用mysql.connector而不是pymysql如下所示时:

with SSHTunnelForwarder((ssh_host, 22), ssh_username=ssh_user, ssh_password=ssh_password,
                remote_bind_address=("127.0.0.1", 3306)) as tunnel:

        config = {
                        'user': user,
                        'password': password,
                        'host': tunnel.local_bind_host,
                        'port': tunnel.local_bind_port,
                        'database': db
                    }
        
        conn = mysql.connector.connect(**config)
        mycursor = cnx.cursor()
        mycursor.execute("SELECT VERSION()")
        myresult = mycursor.fetchall()
Run Code Online (Sandbox Code Playgroud)

代码停止于conn = mysql.connector.connect(**config). 它永远不会给出错误或停止,它只是挂在这条线上。

为什么是这样?

配置属性对该模块无效吗?

nck*_*nck 8

由于这里似乎有一个问题,我遵循了 @Andr\xc3\xa9 Restivo 的评论,它似乎对我有用,设置use_pureTrue. 我不确定这到底是做什么的:

\n
    def __get_db_connection(self) -> None:\n        """\n        Connect to the database\n        """\n        try:\n            logger.debug(f\'Connecting to mysql db "{self.config.mysql_database}"...\')\n            with mysql.connector.connect(\n                host=self.config.mysql_ip,\n                port=self.tunnel.local_bind_port,\n                user=self.config.mysql_user,\n                password=self.config.mysql_password,\n                database=self.config.mysql_database,\n                use_pure=True\n            ) as connection:\n                self.connection = connection\n                logger.info(connection)\n        except mysql.connector as e:\n            logger.error(e)\n            raise\n
Run Code Online (Sandbox Code Playgroud)\n