首頁 > 軟體

Python基於ssh遠端連線Mysql資料庫操作

2022-06-23 14:00:11

背景

如果需要存取遠端伺服器的Mysql資料庫,但是該Mysql資料庫為了安全期間,安全措施設定為只允許本地連線(也就是你需要登入到該臺伺服器才能使用),其他遠端連線是不可以直接存取,並且相應的埠也做了修改,那麼就需要基於ssh來連線該資料庫。這種方式連線資料庫與Navicat裡面介面化基於ssh連線一樣。

Navicat

連線資料庫

安裝支援庫

  • 如果要連線Mysql,首先需要安裝pymysql
pip install pymysql
  • 安裝基於ssh的庫sshtunnel
pip install sshtunnel    #當前最新 0.3.1版

建議安裝最新的sshtunnel庫,舊版本庫有一些bug

連線Mysql

基於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載入txt資料亂碼問題升級版解決方法

Python檔案打包成exe可執行程式

以上就是Python基於ssh遠端連線Mysql資料庫操作的詳細內容,更多關於Python ssh遠端連線Mysql的資料請關注it145.com其它相關文章!


IT145.com E-mail:sddin#qq.com