通过Python连接到MySQL,我的结果相互矛盾

问题描述 投票:0回答:1

我正在尝试连接到Python Anywhere上托管的MySQL数据库。在下面的例子中connection.get_server_info()返回一个结果,但connection.is_connected()返回False,我不确定为什么。

这是我的代码:

import mysql.connector
import sshtunnel

sshtunnel.SSH_TIMEOUT = 5.0
sshtunnel.TUNNEL_TIMEOUT = 5.0

with sshtunnel.SSHTunnelForwarder(
    ('ssh.pythonanywhere.com'),
    ssh_username='USERNAME', ssh_password='PASSWORD',
    remote_bind_address=('USERNAME.mysql.pythonanywhere-services.com', 3306)
) as tunnel:
    connection = mysql.connector.connect(
        user='USERNAME', password='DB_PASSWORD',
        host='127.0.0.1', port=tunnel.local_bind_port,
        database='USERNAME$default',
    )
db_info = connection.get_server_info()
if connection.is_connected():      
    print('Connected to MySQL DB...version on ', db_info)
else:
    print('Failed to connect.')
print(db_info)
connection.close()

我在Python Anywhere上有一个付费帐户,因此SSH隧道应该是可行的

mysql pythonanywhere ssh-tunnel
1个回答
1
投票

这是因为你在关闭后试图访问SSH隧道;当你退出with块时隧道关闭,所以使用连接的任何东西都需要缩进,以便它包含在其中。您上面的代码如下所示:

import mysql.connector
import sshtunnel

sshtunnel.SSH_TIMEOUT = 5.0
sshtunnel.TUNNEL_TIMEOUT = 5.0

with sshtunnel.SSHTunnelForwarder(
    ('ssh.pythonanywhere.com'),
    ssh_username='USERNAME', ssh_password='PASSWORD',
    remote_bind_address=('USERNAME.mysql.pythonanywhere-services.com', 3306)
) as tunnel:
    connection = mysql.connector.connect(
        user='USERNAME', password='DB_PASSWORD',
        host='127.0.0.1', port=tunnel.local_bind_port,
        database='USERNAME$default',
    )
    db_info = connection.get_server_info()
    if connection.is_connected():      
        print('Connected to MySQL DB...version on ', db_info)
    else:
        print('Failed to connect.')
    print(db_info)
    connection.close()
© www.soinside.com 2019 - 2024. All rights reserved.