Python基于ssh遠程連接Mysql數據庫操作
更新時間:2022年06月23日 11:50:34 作者:數據人阿多
這篇文章主要為大家介紹了Python基于ssh遠程連接Mysql數據庫操作示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
背景
如果需要訪問遠程服務器的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'執(zhí)行查詢語句:{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()這些一定要規(guī)范使用,防止不必要的bug - 傳入參數時建議用這種方式
cursor.execute(sql,args),防止sql注入的風險
相關參考:
以上就是Python基于ssh遠程連接Mysql數據庫操作的詳細內容,更多關于Python ssh遠程連接Mysql的資料請關注腳本之家其它相關文章!
相關文章
python文字和unicode/ascll相互轉換函數及簡單加密解密實現代碼
這篇文章主要介紹了python文字和unicode/ascll相互轉換函數及簡單加密解密實現代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-08-08

