centos6安装mysql并远程连接_Python 基于ssh连接远程Mysql数据库

47a1108f6150b9c16328422b27231d37.gif

背景

如果需要访问远程服务器的Mysql数据库,但是该Mysql数据库为了安全期间,安全措施设置为只允许本地连接(也就是你需要登录到该台服务器才能使用),其他远程连接是不可以直接访问,并且相应的端口也做了修改,那么就需要基于ssh来连接该数据库。这种方式连接数据库与Navicat里面界面化基于ssh连接一样。

8899b4abb95f34ed366fa9c55ab434bd.png
Navicat
9c0b9c17867d57db2758e351ef68953c.png
连接数据库

安装支持库

  • 如果要连接Mysql,首先需要安装pymysql

1pip install pymysql
  • 安装基于ssh的库sshtunnel

1pip install sshtunnel    #当前最新 0.3.1版

建议安装最新的sshtunnel库,旧版本库有一些bug

连接Mysql

基于ssh连接Mysql可以查看sshtunnel的文档,里面有一些案例

 1with SSHTunnelForwarder(
2        ('192.168.1.1', 2222),
3        ssh_password='123456',
4        ssh_username='root',
5        remote_bind_address=('127.0.0.1', 3306)) as server:
6    print('SSH连接成功')
7    conn = pymysql.connect(host='127.0.0.1',
8                           port=server.local_bind_port,
9                           user='root',
10                           database='data',
11                           charset='utf8')
12    print('mysql数据库连接成功')
13    cursor = conn.cursor()
14    ...  #获取数据操作,此处省略
15    cursor.close()
16    conn.close()

自定义查询函数

可以对上面的连接进行封装为一个函数,方便其他地方使用

 1def mysql_ssh(sql,args=None):
2    with SSHTunnelForwarder(
3            ('192.168.1.1', 2222),
4            ssh_password='123456',
5            ssh_username='root',
6            remote_bind_address=('127.0.0.1', 3306)) as server:
7        print('SSH连接成功')
8        conn = pymysql.connect(host='127.0.0.1',
9                               port=server.local_bind_port,
10                               user='root',
11                               database='data',
12                               charset='utf8')
13        print('mysql数据库连接成功')
14        cursor = conn.cursor()
15        print('游标获取成功')
16        try:
17            print(f'执行查询语句:{sql}  参数:{args}')
18            cursor.execute(sql,args)
19            print('数据查询成功')
20            conn.commit()
21            print('事务提交成功')
22            datas = cursor.fetchall()
23            success = True
24        except:
25            print('数据查询失败')
26            datas = None
27            success = False
28
29        print('正在关闭数据库连接')
30        cursor.close()
31        conn.close()
32
33    return datas, success

注意点:

  • 在使用数据库时,conn.commit()cursor.close()conn.close()
    这些一定要规范使用,防止不必要的bug

  • 传入参数时建议用这种方式cursor.execute(sql,args),防止sql注入的风险

历史相关文章

  • Python加载txt数据乱码问题升级版解决方法

  • Python文件打包成exe可执行程序


以上是自己实践中遇到的一些问题,分享出来供大家参考学习,欢迎关注 DataShare ,不定期分享干货

a588a3f5304ad8387b643aab9569e820.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值