python如何通過跳板機連接MySQL
python通過跳板機連接MySQL
生產(chǎn)環(huán)境中,為了安全起見,大多數(shù)的數(shù)據(jù)庫是無法在本地直接訪問的,需要先連接跳板機,然后通過跳板機訪問。
這么做雖然在安全方面稍有保證,但是對于寫代碼的人來說,增加了一定的難度,以下是我個人對python連接跳板機連接mysql的一些總結。
首先,需要下載sshtunnel包,使用pip即可,其次是連接MySQL的包,這個根據(jù)自己的喜好來就好,我個人常用的是mysql.connector和pymysql,這里就使用mysql.connector。
代碼如下:
import mysql.connector from sshtunnel import SSHTunnelForwarder server = SSHTunnelForwarder( ? ? ? ? (host_jump, int(port_jump)), ?# 跳板機的配置 ? ? ? ? ssh_pkey=ssh_pk_jump, ? ? ? ? ssh_username=user_name_jump, ? ? ? ? remote_bind_address=(host_mysql, int(port_mysql))) ?# 數(shù)據(jù)庫服務器的配置 server.start() conn = mysql.connector.connect(host='127.0.0.1', port=server.local_bind_port, user=user_name_mysql, password=password_mysql, database=database) # do something... conn.close() server.close()
說明:
1:因為我的跳板機是通過密鑰連接的,所以需要ssh_pkey參數(shù),值是密鑰的路徑,如果需要通過密碼連接,將該參數(shù)換成ssh_password即可;
2:SSHTunnelForwarder方法返回的server對象必須調用start()方法后才可以正常使用;
3:在連接MySQL時,connect()方法的參數(shù)中的host必須為127.0.0.1;
4:由于端口必須為數(shù)字類型,所以使用int()方法轉換;
5:使用結束后,為了安全起見,調用server的close()方法關閉連接,當然也可以使用with語句,如下:
with SSHTunnelForwarder( ? ? ? ? (host_jump, int(port_jump)), ?# 跳板機的配置 ? ? ? ? ssh_pkey=ssh_pk_jump, ? ? ? ? ssh_username=user_name_jump, ? ? ? ? remote_bind_address=(host_mysql, int(port_mysql))) as server: ?# MySQL服務器的配置 ? ? conn = pymysql.connect(host='127.0.0.1', port=server.local_bind_port, user=user_name_mysql, password=password, database=database)
此時不僅可以省略close()方法,也可以省略start()方法。
MySql跳板機 python連接方法及配置
import pymysql from sshtunnel import SSHTunnelForwarder #可能需要安裝上面的包 #跳板機 host_jump=跳板機ip port_jump=跳板機port user_name_jump=跳板機用戶名 ssh_password=跳板機密碼 #數(shù)據(jù)庫 host_mysql=數(shù)據(jù)庫ip port_mysql=數(shù)據(jù)庫port user_name_mysql=數(shù)據(jù)庫用戶名 password_mysql=數(shù)據(jù)庫密碼 database=數(shù)據(jù)庫名稱 local_bind_port=22 #本地端口自行定義 server = SSHTunnelForwarder( (host_jump, int(port_jump)), # 跳板機的配置 ssh_password=ssh_password, ssh_username=user_name_jump, remote_bind_address=(host_mysql, int(port_mysql))) # 數(shù)據(jù)庫服務器的配置 server.start() #啟動server connection = pymysql.connect(host='127.0.0.1', port=server.local_bind_port, user=user_name_mysql, password=password_mysql, database=database, charset="utf8", cursorclass=pymysql.cursors.DictCursor) cursor = connection.cursor() cursor.execute('select * from test_db where id=1') data=cursor.fetchall() #注意關閉 conn.close() server.close() print(data)
總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Python中不同數(shù)據(jù)對象的空值校驗的方法小結
Python中有多種數(shù)據(jù)對象,每種都有其特定的空值表示方法和校驗方式,本文將深入探討這些空值校驗的方法,有需要的小伙伴可以參考一下2024-04-04python使用wmi模塊獲取windows下的系統(tǒng)信息 監(jiān)控系統(tǒng)
Python用WMI模塊獲取Windows系統(tǒng)的硬件信息:硬盤分區(qū)、使用情況,內(nèi)存大小,CPU型號,當前運行的進程,自啟動程序及位置,系統(tǒng)的版本等信息。2015-10-10Python實現(xiàn)將字典(列表按列)存入csv文件
這篇文章主要介紹了Python實現(xiàn)將字典(列表按列)存入csv文件方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-06-06安裝python-docx后,無法在pycharm中導入的解決方案
這篇文章主要介紹了安裝python-docx后,無法在pycharm中導入的解決方案,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-03-03Python初學者需要注意的事項小結(python2與python3)
這篇文章主要介紹了Python初學者需要注意的事項小結,包括了python2與python3的一些區(qū)別,需要的朋友可以參考下2018-09-09對django 模型 unique together的示例講解
今天小編就為大家分享一篇對django 模型 unique together的示例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-08-08