Python基于ssh遠(yuǎn)程連接Mysql數(shù)據(jù)庫(kù)操作
背景
如果需要訪問(wèn)遠(yuǎn)程服務(wù)器的Mysql數(shù)據(jù)庫(kù),但是該Mysql數(shù)據(jù)庫(kù)為了安全期間,安全措施設(shè)置為只允許本地連接(也就是你需要登錄到該臺(tái)服務(wù)器才能使用),其他遠(yuǎn)程連接是不可以直接訪問(wèn),并且相應(yīng)的端口也做了修改,那么就需要基于ssh來(lái)連接該數(shù)據(jù)庫(kù)。這種方式連接數(shù)據(jù)庫(kù)與Navicat里面界面化基于ssh連接一樣。

Navicat

連接數(shù)據(jù)庫(kù)
安裝支持庫(kù)
- 如果要連接Mysql,首先需要安裝pymysql
pip install pymysql
- 安裝基于ssh的庫(kù)sshtunnel
pip install sshtunnel #當(dāng)前最新 0.3.1版
建議安裝最新的sshtunnel庫(kù),舊版本庫(kù)有一些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數(shù)據(jù)庫(kù)連接成功')
cursor = conn.cursor()
... #獲取數(shù)據(jù)操作,此處省略
cursor.close()
conn.close()
自定義查詢函數(shù)
可以對(duì)上面的連接進(jìn)行封裝為一個(gè)函數(shù),方便其他地方使用
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數(shù)據(jù)庫(kù)連接成功')
cursor = conn.cursor()
print('游標(biāo)獲取成功')
try:
print(f'執(zhí)行查詢語(yǔ)句:{sql} 參數(shù):{args}')
cursor.execute(sql,args)
print('數(shù)據(jù)查詢成功')
conn.commit()
print('事務(wù)提交成功')
datas = cursor.fetchall()
success = True
except:
print('數(shù)據(jù)查詢失敗')
datas = None
success = False
print('正在關(guān)閉數(shù)據(jù)庫(kù)連接')
cursor.close()
conn.close()
return datas, success
注意點(diǎn):
- 在使用數(shù)據(jù)庫(kù)時(shí),
conn.commit()、cursor.close()、conn.close()這些一定要規(guī)范使用,防止不必要的bug - 傳入?yún)?shù)時(shí)建議用這種方式
cursor.execute(sql,args),防止sql注入的風(fēng)險(xiǎn)
相關(guān)參考:
Python加載txt數(shù)據(jù)亂碼問(wèn)題升級(jí)版解決方法
以上就是Python基于ssh遠(yuǎn)程連接Mysql數(shù)據(jù)庫(kù)操作的詳細(xì)內(nèi)容,更多關(guān)于Python ssh遠(yuǎn)程連接Mysql的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python文字和unicode/ascll相互轉(zhuǎn)換函數(shù)及簡(jiǎn)單加密解密實(shí)現(xiàn)代碼
這篇文章主要介紹了python文字和unicode/ascll相互轉(zhuǎn)換函數(shù)及簡(jiǎn)單加密解密實(shí)現(xiàn)代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08
Django超詳細(xì)講解圖書(shū)管理系統(tǒng)的實(shí)現(xiàn)
前段時(shí)間翻文件發(fā)現(xiàn)了以前學(xué)習(xí)python和django時(shí)做的一個(gè)系統(tǒng),當(dāng)時(shí)的想法是將這玩意做出來(lái)應(yīng)付web開(kāi)發(fā)大作業(yè)、課程設(shè)計(jì)作業(yè)甚至是畢設(shè)用的,實(shí)際上也確實(shí)應(yīng)付了課程設(shè)計(jì),功能雖然不算多,但是應(yīng)付課程設(shè)計(jì)或者大作業(yè)綽綽有余了2022-07-07
python輸入整條數(shù)據(jù)分割存入數(shù)組的方法
今天小編就為大家分享一篇python輸入整條數(shù)據(jù)分割存入數(shù)組的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-11-11
用python畫(huà)了個(gè)圣誕樹(shù)給女朋友
大家好,本篇文章主要講的是用python畫(huà)了個(gè)圣誕樹(shù)給女朋友,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽2021-12-12
Python實(shí)現(xiàn)比較撲克牌大小程序代碼示例
這篇文章主要介紹了Python實(shí)現(xiàn)比較撲克牌大小程序代碼示例,具有一定借鑒價(jià)值,需要的朋友可以了解下。2017-12-12

