Python基于ssh远程连接Mysql数据库操作
作者:数据人阿多 时间:2024-01-19 15:02:16
背景
如果需要访问远程服务器的Mysql数据库,但是该Mysql数据库为了安全期间,安全措施设置为只允许本地连接(也就是你需要登录到该台服务器才能使用),其他远程连接是不可以直接访问,并且相应的端口也做了修改,那么就需要基于ssh来连接该数据库。这种方式连接数据库与Navicat里面界面化基于ssh连接一样。
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注入的风险
相关参考:
Python加载txt数据乱码问题升级版解决方法
Python文件打包成exe可执行程序
来源:https://www.jianshu.com/p/e86c247da544
标签:Python,ssh,远程连接,Mysql
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
pycharm 2020.2.4 pip install Flask 报错 Error:Non-zero exit code的问题
2022-10-25 22:18:49
![](https://img.aspxhome.com/file/2023/3/71983_0s.png)
浅谈js中startsWith 函数不能在任何浏览器兼容的问题
2024-04-23 09:11:38
Css 清除浮动
2008-09-15 18:47:00
python+mysql实现个人论文管理系统
2024-01-25 02:00:25
![](https://img.aspxhome.com/file/2023/1/105201_0s.png)
IE8"开发人员工具"使用详解
2009-03-26 12:51:00
![](https://img.aspxhome.com/file/UploadPic/up/2009032613125389.gif)
Java使用JDBC向MySQL数据库批次插入10W条数据(测试效率)
2024-01-15 15:41:11
终结IE6下背景图片闪烁问题
2009-03-04 10:11:00
mysql实现sequence功能的代码
2024-01-27 14:30:20
用JS实现轮播图效果(二)
2024-06-05 09:11:49
![](https://img.aspxhome.com/file/2023/4/123384_0s.jpg)
python四则运算表达式求值示例详解
2023-01-31 06:03:04
python学习之第三方包安装方法(两种方法)
2021-02-20 03:29:40
![](https://img.aspxhome.com/file/2023/4/99014_0s.png)
python实现吃苹果小游戏
2023-08-25 19:25:45
分享Python 的24个编程超好用技巧
2021-05-21 16:51:55
MySQL 8.0新功能监控统计限制连接不再担心被垃圾SQL搞爆内存
2024-01-16 12:51:25
重置MySQL中表中自增列的初始值的实现方法
2024-01-17 19:56:47
Python可视化单词统计词频统计中文分词的实现步骤
2023-10-24 17:16:49
![](https://img.aspxhome.com/file/2023/4/85164_0s.jpg)
MyBatis批量插入/修改/删除MySql数据
2024-01-18 05:55:11
![](https://img.aspxhome.com/file/2023/0/108420_0s.png)
asp解决防止表单重复提交的方法
2007-10-19 18:40:00
iscroll动态加载数据完美解决方法
2024-04-10 13:59:01
一次神奇的MySQL死锁排查记录
2024-01-24 04:22:47
![](https://img.aspxhome.com/file/2023/9/107719_0s.jpg)