python如何通过跳板机连接MySQL

 更新时间:2022年12月13日 09:36:12   作者:Marvin_BHR  
这篇文章主要介绍了python如何通过跳板机连接MySQL问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

python通过跳板机连接MySQL

生产环境中,为了安全起见,大多数的数据库是无法在本地直接访问的,需要先连接跳板机,然后通过跳板机访问。

这么做虽然在安全方面稍有保证,但是对于写代码的人来说,增加了一定的难度,以下是我个人对python连接跳板机连接mysql的一些总结。

首先,需要下载sshtunnel包,使用pip即可,其次是连接MySQL的包,这个根据自己的喜好来就好,我个人常用的是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)))  # 数据库服务器的配置
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参数,值是密钥的路径,如果需要通过密码连接,将该参数换成ssh_password即可;

2:SSHTunnelForwarder方法返回的server对象必须调用start()方法后才可以正常使用;

3:在连接MySQL时,connect()方法的参数中的host必须为127.0.0.1;

4:由于端口必须为数字类型,所以使用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=跳板机密码
 
#数据库
host_mysql=数据库ip
port_mysql=数据库port
user_name_mysql=数据库用户名
password_mysql=数据库密码
database=数据库名称
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)))  # 数据库服务器的配置
 
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)

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • python读取注册表中值的方法

    python读取注册表中值的方法

    在Python的标准库中,_winreg.pyd可以操作Windows的注册表,另外第三方的win32库封装了大量的Windows API,使用起来也很方便。不过这里介绍的是使用_winreg操作注册表,毕竟是Python自带的标准库,无需安装第三方库
    2013-04-04
  • pandas string转dataframe的方法

    pandas string转dataframe的方法

    下面小编就为大家分享一篇pandas string转dataframe的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-04-04
  • python输出pdf文档的实例

    python输出pdf文档的实例

    今天小编就为大家分享一篇python输出pdf文档的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • python实现机械分词之逆向最大匹配算法代码示例

    python实现机械分词之逆向最大匹配算法代码示例

    这篇文章主要介绍了python实现机械分词之逆向最大匹配算法代码示例,具有一定借鉴价值,需要的朋友可以参考下。
    2017-12-12
  • Python endswith()函数的具体使用

    Python endswith()函数的具体使用

    本文主要介绍了Python endswith()函数的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • Python如何统计大小写字母个数和数字个数

    Python如何统计大小写字母个数和数字个数

    这篇文章主要介绍了Python如何统计大小写字母个数和数字个数问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • Python 面向切面编程 AOP 及装饰器

    Python 面向切面编程 AOP 及装饰器

    这篇文章主要介绍了Python 面向切面编程 AOP 及装饰器,AOP,就是面向切面编程,简单的说,就是动态地将代码切入到类的指定方法、指定位置上的编程思想就是面向切面的编程,更多相关资需要的小伙伴可以参考下面文章内容
    2022-05-05
  • 深入理解Python对Json的解析

    深入理解Python对Json的解析

    Json是一种常用的数据交换结构,由于轻量、易于阅读和编写等特点,在网络方面应用很广。下面这篇文章主要介绍了Python对Json解析的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-02-02
  • PySide2出现“ImportError: DLL load failed: 找不到指定的模块”的问题及解决方法

    PySide2出现“ImportError: DLL load failed: 找不到指定的模块”的问题及解决方法

    这篇文章主要介绍了PySide2出现“ImportError: DLL load failed: 找不到指定的模块”的问题及解决方法,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2020-06-06
  • python进度条tqdm使用方式

    python进度条tqdm使用方式

    这篇文章主要介绍了python进度条tqdm使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02

最新评论