Python基于ssh远程怎么连接Mysql数据库

网友投稿 1216 2023-07-07

Python基于ssh远程怎么连接Mysql数据库

Python基于ssh远程怎么连接Mysql数据库

背景

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

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'执行查询语句:{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()这些一定要规范使用,防止不必要的bug传入参数时建议用这种方式cursor.execute(sql,args),防止sql注入的风险

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Navicat配置mysql数据库用户权限问题怎么解决
下一篇:MySQL如何存储IP值
相关文章