首頁  >  文章  >  資料庫  >  Python基於ssh遠端怎麼連接Mysql資料庫

Python基於ssh遠端怎麼連接Mysql資料庫

WBOY
WBOY轉載
2023-05-27 16:07:131324瀏覽

背景

如果需要存取遠端伺服器的Mysql資料庫,但是該Mysql資料庫為了安全期間,安全措施設定為只允許本地連線(也就是你需要登入該伺服器才能使用),其他遠端連線是不可以直接訪問,並且對應的連接埠也做了修改,那麼就需要基於ssh來連接該資料庫。連接資料庫的方法類似於透過SSH在Navicat中實現介面化連接。

Python基於ssh遠端怎麼連接Mysql資料庫

Navicat

Python基於ssh遠端怎麼連接Mysql資料庫

#連接資料庫

#安裝支援庫

  • 如果要連接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基於ssh遠端怎麼連接Mysql資料庫的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除