如果需要存取遠端伺服器的Mysql資料庫,但是該Mysql資料庫為了安全期間,安全措施設定為只允許本地連線(也就是你需要登入該伺服器才能使用),其他遠端連線是不可以直接訪問,並且對應的連接埠也做了修改,那麼就需要基於ssh來連接該資料庫。連接資料庫的方法類似於透過SSH在Navicat中實現介面化連接。
Navicat
#連接資料庫
如果要連接Mysql,首先需要安裝pymysql
pip install pymysql
安裝基於ssh的函式庫sshtunnel
pip install sshtunnel #当前最新 0.3.1版
建議安裝最新的sshtunnel庫,舊版庫有一些bug
#基於ssh連接Mysql可以查看sshtunnel的文檔,裡面有一些案例
with SSHTunnelForwarder( ('192.168.1.1', 2222), ssh_password='123456', ssh_username='root', remote_bind_address=('127.0.0.1', 3306)) as server: print('SSH连接成功') conn = pymysql.connect(host='127.0.0.1', port=server.local_bind_port, user='root', database='data', charset='utf8') print('mysql数据库连接成功') cursor = conn.cursor() ... #获取数据操作,此处省略 cursor.close() conn.close()
可以對上面的連接進行封裝為函數,方便其他地方使用
def mysql_ssh(sql,args=None): with SSHTunnelForwarder( ('192.168.1.1', 2222), ssh_password='123456', ssh_username='root', remote_bind_address=('127.0.0.1', 3306)) as server: print('SSH连接成功') conn = pymysql.connect(host='127.0.0.1', port=server.local_bind_port, user='root', database='data', charset='utf8') print('mysql数据库连接成功') cursor = conn.cursor() print('游标获取成功') try: print(f'执行查询语句:{sql} 参数:{args}') cursor.execute(sql,args) print('数据查询成功') conn.commit() print('事务提交成功') datas = cursor.fetchall() success = True except: print('数据查询失败') datas = None success = False print('正在关闭数据库连接') cursor.close() conn.close() return datas, success
注意點:
使用資料庫時,conn.commit()
、cursor.close()
、conn.close()
這些一定要規範使用,防止不必要的bug
傳入參數時建議用這種方式cursor.execute(sql,args)
,防止sql注入的風險
以上是Python基於ssh遠端怎麼連接Mysql資料庫的詳細內容。更多資訊請關注PHP中文網其他相關文章!