首页  >  文章  >  数据库  >  Python基于ssh远程怎么连接Mysql数据库

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

WBOY
WBOY转载
2023-05-27 16:07:131330浏览

背景

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

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

Navicat

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

连接数据库

安装支持库

  • 如果要连接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基于ssh远程怎么连接Mysql数据库的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文转载于:yisu.com。如有侵权,请联系admin@php.cn删除