pymysql版本:1.0.2 sshtunnel版本:0.4.0 python 版本:3.8.4
使用pymysql,SSHTunnelForwarder连接数据库报:pymysql.err.OperationalError: (1043, 'Bad handshake')
import pymysql
from sshtunnel import SSHTunnelForwarder
with SSHTunnelForwarder(
('10.102.0.195', 22), #B机器的配置
ssh_password="123456",
ssh_username="neo",
remote_bind_address=('localhost', 3306)) as server: #A机器的配置
conn = pymysql.connect(host='127.0.0.1', #此处必须是是127.0.0.1
port=server.local_bind_port,
user='root',
passwd='123456',
db='dbtest')
try:
with conn.cursor() as cursor:
# 执行sql语句,插入记录
sql = 'show databases'
cursor.execute(sql)
result=cursor.fetchall()
print(result)
# 没有设置默认自动提交,需要主动提交,以保存所执行的语句
#conn.commit()
except:
print('error')
Traceback (most recent call last):
File "D:\python38\lib\site-packages\minium\framework\libs\unittest\case.py", line 86, in run
self._callTestMethod(testMethod)
File "D:\python38\lib\unittest\case.py", line 633, in _callTestMethod
method()
File "D:\work_log\pythoncode\qcdawechat\test\test_obd.py", line 178, in test_806_14
conn = pymysql.connect(host='127.0.0.1', # 此处必须是是127.0.0.1
File "D:\python38\lib\site-packages\pymysql\connections.py", line 353, in init
self.connect()
File "D:\python38\lib\site-packages\pymysql\connections.py", line 633, in connect
self._request_authentication()
File "D:\python38\lib\site-packages\pymysql\connections.py", line 907, in _request_authentication
auth_packet = self._read_packet()
File "D:\python38\lib\site-packages\pymysql\connections.py", line 725, in _read_packet
packet.raise_for_error()
File "D:\python38\lib\site-packages\pymysql\protocol.py", line 221, in raise_for_error
err.raise_mysql_exception(self._data)
File "D:\python38\lib\site-packages\pymysql\err.py", line 143, in raise_mysql_exception
raise errorclass(errno, errval)
pymysql.err.OperationalError: (1043, 'Bad handshake')
更改pymysql版本
成功连接到数据库并可以获得查询内容