python详解如何通过sshtunnel pymssql实现远程连接数据库

 更新时间:2021年10月28日 14:59:55   作者:西域战士  
为了安全起见,很多公司服务器数据库的访问多半是要做限制的,由专门的DBA管理,而且都是做的集群,数据库只能内网访问,所以就有一个直接的问题是,往往多数时候,在别的机器上(比如自己本地),是不能访问数据库的,给日常开发调试造成了很大不便

最近几天在做Python相关项目,有个需求 ,是希望在任何机器上都可以ssh到某台在数据库白名单的机器上,然后访问数据库,不然的话就要去服务器安装Python环境,运行程序,比较麻烦,翻阅多篇博客文章,决定自己去实现。

涉及库:pymssql、sshtunnel
涉及数据库:SQLSERVER

场景如下:

跳板机核心代码

   def __get_ssh_connector(self):
        # 远程连接
        # 跳板机地址 端口,服务器账号,密码配置
        server = SSHTunnelForwarder(
            (
                self.connect_config.get("ssh_host", ‘白名单服务器地址'),
                self.connect_config.get("ssh_port", 22)
            ),
            ssh_username=self.connect_config.get("ssh_username", ‘白名单服务器账号 '),
            ssh_password=self.connect_config.get("ssh_password", ‘白名单服务器密码 '),
            # 内网数据库地址和端口
            remote_bind_address=(self.connect_config.get("dbserver", '目标数据库地址'), self.connect_config.get("ssh_mssql_port", ‘数据库端口'))
        )
        server.start()
        return server  # 远程主机上的mssql通过ssh连接映射到本地的端口

pymssql 连接数据库核心代码

 def get_mssql_connector(self):
       return get_mssql_connector({
           "port": self.server.local_bind_port, #非常重要
           "username": ‘目标数据库账号',
           "password": ‘目标数据库密码',
           "db": self.connect_config.get('db', ‘目标数据库')
       })
def __get_mssql_connector(database_config):
    host = database_config.get('host', '127.0.0.1')
    port = database_config.get('port', ‘数据库端口')
    user = database_config.get('username', ‘目标数据库账号')
    passwd = database_config.get('password', ‘目标数据库密码')
    db = database_config.get('db', ‘目标数据库')
    return  pymssql.connect(host=host, port=port, user=user, password=passwd, database=db, charset="UTF-8")

MySql 和SQLSERVER方法一样,不一样的地方pymssql.connect改成pymysql.connect

人生第一篇技术博客,第一次奉献给 大家

到此这篇关于python详解如何通过sshtunnel pymssql实现远程连接数据库的文章就介绍到这了,更多相关python 远程连接数据库内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python+matplotlib+numpy绘制精美的条形统计图

    Python+matplotlib+numpy绘制精美的条形统计图

    这篇文章主要介绍了Python+matplotlib+numpy绘制精美的条形统计图,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • numpy concatenate数组拼接方法示例介绍

    numpy concatenate数组拼接方法示例介绍

    这篇文章主要介绍了numpy concatenate数组拼接方法示例介绍,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-05-05
  • python安装virtualenv虚拟环境步骤图文详解

    python安装virtualenv虚拟环境步骤图文详解

    这篇文章主要介绍了python安装virtualenv虚拟环境步骤,本文通过图文并茂的形式给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-09-09
  • python中的列表和元组区别分析

    python中的列表和元组区别分析

    这篇文章主要介绍了python中的列表和元组区别分析,需要的朋友可以参考下
    2020-12-12
  • 聊聊python中令人迷惑的duplicated和drop_duplicates()用法

    聊聊python中令人迷惑的duplicated和drop_duplicates()用法

    这篇文章主要介绍了聊聊python中令人迷惑的duplicated和drop_duplicates()用法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-05-05
  • Python中用Ctrl+C终止多线程程序的问题解决

    Python中用Ctrl+C终止多线程程序的问题解决

    花了一天时间用python为服务写了个压力测试。很简单,多线程向服务器发请求。但写完之后发现如果中途想停下来,按Ctrl+C达不到效果,自然想到要用信号处理函数捕捉信号,使线程都停下来,问题解决的方法请往下看:
    2013-03-03
  • python基础教程之数字处理(math)模块详解

    python基础教程之数字处理(math)模块详解

    这篇文章主要介绍了pythonr的数字处理模块知识(math),需要的朋友可以参考下
    2014-03-03
  • Python实现数据滤波的示例详解

    Python实现数据滤波的示例详解

    这篇文章主要为大家详细介绍了Python实现数据滤波的相关知识,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以跟随小编一起学习一下
    2024-03-03
  • Python多线程中比time.sleep更好用的暂停方式

    Python多线程中比time.sleep更好用的暂停方式

    这篇文章主要介绍了Python多线程中比time.sleep更好用的暂停方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02
  • 10分钟快速入门Pandas库

    10分钟快速入门Pandas库

    pandas 是基于NumPy 的一种工具,该工具是为解决数据分析任务而创建的,这篇文章主要介绍了10分钟快速入门Pandas库,重点介绍pandas常见使用方法,结合实例代码介绍的非常详细,需要的朋友可以参考下
    2023-02-02

最新评论