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

生产环境中,为了安全起见,大多数的数据库是无法在本地直接访问的,需要先连接跳板机,然后通过跳板机访问。创业天下测试数据库也是采用这种方法连接数据的,那么我们应该怎么通过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++编译环境

dfaac4876e866ba4b92aa79f4b21f267.png

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/500574.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

去 QCon 学习

他山之石,可以攻玉。就看你的项目有多少“玉”的成分,究竟敢不敢用“石”来攻。 QCon Beijing 2010 | 全球企业开发大会(北京站) 大会:4 月23 日~4 月25 日;培训:4 月21 日~4 月22 日 大会地点…

Requirements of pair programming

题目:围棋棋谱的特征搜索说明:将用户的棋盘输入作为特征,在棋谱包中读取SGF棋谱,找出特征相符的棋谱。注:不仅要考虑棋子的位置,还要考虑走棋的顺序。对找出的棋谱按照符合程度排序。实现为桌面程序&#x…

电脑系统linux怎么读,Linux怎么读

Linux怎么读Linux是一种操作系统,不过很多朋友都不知道Linux怎么读?Linux正确读法 “哩呐克斯”,音标:[li:nэks] 重音在“哩”上。由于大多数的电脑都是安装Windows,其实也可以安装Linux,不过大家都习惯了Windwos&am…

各个团队的项目评价

Team 10 – Voice Mail 该软件项目构想/计划/实现/创新等方面的优劣: 构想和计划 1. 设计思路清晰,设计说明和文档较全 2. 多种人机交互方式,所以该项目亮点之处就在于其人机交互 实现 3. 设计良好的UI 4. 下载安装Windows XP版本的软…

大家都纷纷指出了 wp7 的优点 …

http://www.windowsphone7.com/ Windows Phone 7 终于快要和大家见面了! 下面是各路人士对它的评价: Gizmodo says its a neat, fresh start. CNET thinks the hub system is wonderful SlashGear says this is Microsofts attempt to justify its existence in …

Meeters and Greeters 接客大厅

在上海虹桥机场看到了这个标记 – “接客大厅”。 英库和有关单位最近搞了 “雷人英语” http://engkoo.msn.cn/expo/ 活动, 旨在消灭上海和周边地区的“土产英语”, 这个 “Meeters & Greeters Hall” 英语真是 “顶风作案”, 谁这么大胆? “接客大厅” 在祖国大…

旅游去

September 30 旅游指南新版上线! http://travel.msra.cn http://travel.msra.cn 1. 全新搜索体验 2.旅游目的地推荐 3.全球旅游地支持 4.旅游计划功能 5.丰富的旅游资讯

红帽Linux7怎么修改网卡名称,新安装的Centos 7系统怎么将网卡名称改为eth0?

从CentOS/RHEL7起,可预见的命名规则变成了默认。这一规则,接口名称被自动基于固件,拓扑结构和位置信息来确定。现在,即使添加或移除网络设备,接口名称仍然保持固定,而无需重新枚举,和坏掉的硬件…

linux 防火墙 ftp,RedHat6 建立基于防火墙和SELinux的虚拟用户vsFTP

安装vsftp软件yum install vsftpd我们这里安装的版本是vsftpd-2.2.2-6.el6.i686因为我们要建立匿名账户的vsftpd所以还要安装db4和db4_utils两个软件包,redhat6已经默认安装.修改/etc/vsftpd/vsftpd.conf[rootmail ftp]# grep -v ^# /etc/vsftpd/vsftpd.confanonymous_enableYE…

linux终端友好,Linux 中一种友好的 find 替代工具

fd 命令提供了一种简单直白的搜索 Linux 文件系统的方式。fd 是一个超快的,基于 Rust 的 Unix/Linux find 命令的替代品。它不提供所有 find 的强大功能。但是,它确实提供了足够的功能来覆盖你可能遇到的 80% 的情况。诸如良好的规划和方便的…

现代软件工程系列 学生的精彩文章 (4) 为用户服务

from: http://teamkingofcsharp.spaces.live.com/blog/cns!59FC2D3DD66822AA!421.entry 赞一下Office的用户体验今天我做API Hook,开了个Word想截获它的系统调用。结果由于我的程序写屎了,Word一开就崩。崩了大概10次以后,再启动Word的时候…

现代软件工程系列 学生的精彩文章 (6) 我们其实还不懂互联网

from http://cid-ba6a52af193f301f.spaces.live.com/ 第一次把我们自己的写的东西放在网上让别人去用,今天过得非常有传奇色彩,我决定讲个长故事来纪念我们的发布第一天。 由于找不到能放软件的地方,我们把软件以附形式件放在了zol的论坛&am…

现代软件工程系列 学生精彩文章(7) 宝贵的教训

from http://codecanvas3706.spaces.live.com/blog/cns!5A77585898179960!205.entry [当学生的时候, 最好犯一些错误, 经历一些失败. 不经历一些惨痛的失败, 难道要到工作的时候才失败么? ] 个人的失败感言 记得在读完了《梦断代码》之后,我也只是为chandler项…

c语言入门自学为什么要用,为什么要将C语言作为入门语言?

编程是向计算机发出指令以执行特定任务或执行指令的行为,目前专业行业和学术界使用数百种编程语言。一个人需要熟悉并且能够使用至少几种编程语言进行编程才能作为目前专业开发者的成功。学习编程的最好理由在于它对所有人开放,你不需要大学学位即可通过…

现代软件工程讲义 如何提出靠谱的项目建议

互联网时代对于创新者来说, 既是一个伟大的时代, 又是一个糟糕的时代。 你有很多机会做出影响世界的产品, 但是, 似乎任何想法都被别人想到过了, 做出来了, 上市了, 移植到各种平台上去了… 那么我们后来人除了羡慕别人生得早, 还有什么机会呢? 但是往往不经意间, 在同学们…

基础知识很扎实 - 但是面试就是做不出来, 怎么办? (长, 慎入)

http://www.newsmth.net/bbstcon.php?boardMicrosoft&gid48785 有人提问: 看了很多的面试题之类的,感觉虽然自己数据结构与算法基础知识很扎实,但还是做不出来,所以请高人指点。 这个问题看似迷惑, 其实提问的人搞混了两件事 - “数据…

敏捷软件开发宣言ndash;Manifesto for Agile Software Development

敏捷开发, 谁不会呀, 不就是 没文档, 出活快, 用户说啥都能改?下面是一个笑话, 王屋村的大牛说 - 我最近转手接了一个活, 完事能挣四五万, 我拿过图纸一看, 不就是盖一烟囱吗? 我们是敏捷 (Agile) 的团队,要文档作甚? 马上开始干活!都快盖好了&…

现代软件工程 其实还是人的问题

在《现代软件工程》这门课程上,大家分成6-7人的小组进行项目开发,有项目经理 (PM),有开发人员 (dev),测试人员 (test) 等。不久就有PM说,怎么小组里有些人就是不干活? 最早,大家假设所有人都是…

历年高考报考人数和录取人数

全国历年参加高考人数和录取人数统计 (1977年~2010年) 时间(年)参加高考人数(万人)录取人数 (万人)录取率 (%)1977570274.7%197861040.26.6%1979468286.0%1980333288.4%1…

android音乐进度条设计代码,【Android】Android开发实现进度条效果,SeekBar的简单使用。音量,音乐播放进度,视频播放进度等...

作者:程序员小冰,GitHub主页:https://github.com/QQ986945193新浪微博:http://weibo.com/mcxiaobing首先给大家看一下我们今天这个最终实现的效果图:当然,这里的进度,是我们手动触摸控制的。截图…