生产环境中,为了安全起见,大多数的数据库是无法在本地直接访问的,需要先连接跳板机,然后通过跳板机访问。创业天下测试数据库也是采用这种方法连接数据的,那么我们应该怎么通过Python去连接数据库呢,代码如下:

import pymysql

from sshtunnel import SSHTunnelForwarder

from common.log import *

from config.globalparameter import private_key_file, SqlConfig

class MysqlDB(object):

def __init__(self):

self.server = None

self.conn = None

self.cur = None

def start_server(self):

"""

创建连接对象

:return:

"""

self.server = SSHTunnelForwarder(

(SqlConfig["sshIP"], SqlConfig["sshPort"]), # 跳板机的配置

ssh_pkey=private_key_file,

ssh_username=SqlConfig["sshUserName"],

remote_bind_address=(SqlConfig["dbHost"], SqlConfig["dbPort"])) # 数据库的配置

self.server.start() # 连接跳板机服务

self.conn = pymysql.connect(host='127.0.0.1', # 此处必须是127.0.0.1

port=self.server.local_bind_port,

user=SqlConfig["dbUser"],

passwd=SqlConfig["dbPasswd"],

db=SqlConfig["dbName"])

self.cur = self.conn.cursor(cursor=pymysql.cursors.DictCursor) # 创建游标对象,指定数据类型为字典,将打印key,value

def select(self, sql):

"""

执行查询sql,执行成功返回结果,否则返回False,

:param sql: 执行的sql语句

:return:

"""

self.start_server()

try:

count = self.cur.execute(sql) # 执行sql语句

if count > 0:

data_db = self.cur.fetchall() # 获取数据

logger.info("Select succeeded!")

else:

logger.info("Select empty!")

data_db = False

except pymysql.Error as e:

data_db = False

logger.error("Select error:%s" % e)

finally:

self.cur.close()

self.conn.close()

self.server.close()

logger.info("All server closed")

return data_db

if __name__ == '__main__':

sql = "select user_name from `cytx_user_info` where telephone = 15229067460"

conn = MysqlDB()

value = conn.select(sql)[0]["user_name"]

print(value)

说明:

1:因为跳板机是通过密钥连接的,所以需要ssh_pkey参数,值是密钥的路径,如果需要通过密码连接,将该参数换成ssh_password即可

2:SSHTunnelForwarder方法返回的server对象必须调用start()方法后才可以正常使用

3:在连接MySQL时,connect()方法的参数中的host必须为127.0.0.1

4:导入的private_key_file,和SqlConfig分别是密钥存放的路径及数据库连接的配置信息

5:执行完sql语句后使用finally来关闭连接服务

6:导入sshtunnel 模块如果报下面的错误,请安装这个工具:链接:https://pan.baidu.com/s/1cWfjEsCpEFCJ42bLAGt9xg

提取码:ABCD ,因为这个模块部分代码需要c++编译环境

7:如果还是导入失败,尝试升级下你的pip版本:python -m pip install --upgrade pip

php 跳板机连接mysql,使用python如何通过跳板机连接MySQL数据库相关推荐

  1. 【华为机试真题 Python实现】华为机试题整理(已更新211篇)

    文章目录 杂文 华为机试真题系列 牛客网华为机试系列 文章发布时间和导航更新时间可能不同步,会尽快更新

  2. python数据库管理软件_MySQL管理工具MySQL Utilities — 介绍与安装(1)

    MySQL Utilities介绍 MySQL Utilities 提供一组命令行工具用于维护和管理 MySQL 服务器,包括: 管理工具 (克隆.复制.比较.差异.导出.导入) 复制工具 (安装.配 ...

  3. 宿主机172连接容器mysql_开发时从宿主机连接容器中的MySQL

    从宿主机连接Docker容器中的MySQL 刚接触Docker,电脑安装Docker后,使用docker命令pull了一个MySQL5.6的Docker镜像,之后docker run启动创建容器. 可 ...

  4. python通过ssh链接sql(python通过阿里跳板机链接阿里数据库)

    因为要链接公司数据库,使用的有是阿里的跳板机方式(其实我感觉就是ssh方式连接):之前找了很多教程,但是写的都不行,后来自己琢磨了一下,搞明白了连接方式: (我这个方式也只是做一个参考,因为可能每个公 ...

  5. mac版python连接mysql_Mac下Python连接MySQL · BlBana’s BlackHouse

    Mac和Windows下安装mysqlclient坑点记录 Python连接MySQL(mysqlclient) Python连接MySQL类库pymysql python3:mysqlclient, ...

  6. python mysql ssh隧道_在python中使用ssh隧道连接mysql

    通常为了保证数据库安全,不会允许直接连接数据库,而是需要通过SSH隧道去连接服务器背后的数据库: 今天我在用Python连接远程的MySQL时,直连遇到了无法连接的情况,使用了SSH隧道之后解决了问题 ...

  7. python2连接mysql_mysql-2:python操作mysql

    1.python操作mysql 安装MySQL-Python的包: pip install pymysql--import pymysql # pip install MySQLClient--imp ...

  8. python后台架构Django教程——连接读写mysql数据库

    全栈工程师开发手册 (作者:栾鹏) python教程全解 本文衔接至python后台架构Django开发全解. 有其他问题请先阅读:http://blog.csdn.net/luanpeng82548 ...

  9. MySQL数据库基础学习小终结:连接查询、表结构的修改、约束条件、MySQL与python交互

    目录 一.连接查询 1.内连接 2.外连接 二.表结构的修改--alter 1.修改表名 2.修改字段名 3.修改字段类型--modify 4.添加字段 (1)添加日期字段:datetime (2)e ...

最新文章

  1. linux install goolepinyin_Linux截图工具推荐(Ubuntu 18.04亲测)
  2. java向量vector类,java数据结构——Vector(向量类)
  3. Codechef TRIPS Children Trips (分块、倍增)
  4. 【深度学习】新人如何入门Pytorch的路线?有哪些资源推荐?
  5. 如何将不带web.xml的Spring应用程序部署到Tomcat
  6. git撤销commit 并保存之前的修改
  7. Android Studio(5)---引用jar及so文件
  8. 【1291】数据结构上机测试4.1:二叉树的遍历与应用1 SDUTOJ
  9. DataGrid中DropDownList触发SelectedIndexChanged事件并修改DataGrid行值(转载)
  10. css网站变灰色代码
  11. html5画布获取位置,html5画布绘制位置不正确(html5 canvas drawing position not correct)
  12. 土包子也来爆料一下贵族的生活:高尔夫球场见闻
  13. MFC中显示图片(静态、动态)(转)
  14. Mac Pro硬盘清理,为啥我的系统占用如此之多的磁盘空间
  15. 空三匹配和密集匹配的区别与联系
  16. vmware NSX 6.3.3 企业版序列号激活码密钥永久使用
  17. 大学生心理课程网课答案-【必看】
  18. python办公小案例
  19. 【Go语言实战】(8) Go语言并发爬虫
  20. python爬取豆瓣电影信息_Python|简单爬取豆瓣网电影信息

热门文章

  1. 循环,函数,指针作业
  2. 离婚从来不是解决家庭危机的唯一办法
  3. 【转】近期Coolite控件的技术点总结
  4. 数据库连接 未将对象引用到实例
  5. 数据库基础知识——数据库的相关概念
  6. 牛客15499 Jxc军训(快速幂,逆元)
  7. 数据库系统原理复习提纲
  8. python 调用c++库接口出错
  9. wpf 控件生成图片_EyeshotCAD控件生成以及作用
  10. postgresql修炼之道_PostgreSQL的TOAST技术