首先需要一个模块sshtunnel,如果没有直接pip install sshtunnel

其实连个连接方式非常像:

pymysql连接方式:

import pymysql
from sshtunnel import SSHTunnelForwarder ssh_host = "" # 堡垒机ip地址或主机名
ssh_port = 22 # 堡垒机连接mysql服务器的端口号,一般都是22,必须是数字
ssh_user = "" # 这是你在堡垒机上的用户名
ssh_password = "" # 这是你在堡垒机上的用户密码
mysql_host = "localhost" # 这是你mysql服务器的主机名或ip地址
mysql_port = 3306 # 这是你mysql服务器上的端口,3306,mysql就是3306,必须是数字
mysql_user = "" # 这是你mysql数据库上的用户名
mysql_password = "" # 这是你mysql数据库的密码
mysql_db = "" # mysql服务器上的数据库名 with SSHTunnelForwarder(
(ssh_host, ssh_port),
ssh_username=ssh_user,
ssh_password=ssh_password,
remote_bind_address=(mysql_host, mysql_port)) as server:
conn = pymysql.connect(host=mysql_host,
port=server.local_bind_port,
user=mysql_user,
passwd=mysql_password,
db=mysql_db) cursor = conn.cursor()
cursor.execute("select * from user")
row_1 = cursor.fetchone()
print(row_1, type(row_1))
# 获取前n行数据
# row_2 = cursor.fetchmany(3)
# 获取所有数据
# row_3 = cursor.fetchall()
conn.commit()
cursor.close()
conn.close()

如果给pymysql加一个事务处理,可以看这里https://www.cnblogs.com/woider/p/5926744.html

sqlalchemy连接方式:

from sshtunnel import SSHTunnelForwarder
from sqlalchemy import Column, String, Integer, create_engine, event
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.exc import DisconnectionError ssh_host = "" # 堡垒机ip地址或主机名
ssh_port = 22 # 堡垒机连接mysql服务器的端口号,一般都是22,必须是数字
ssh_user = "" # 这是你在堡垒机上的用户名
ssh_password = "" # 这是你在堡垒机上的用户密码
mysql_host = "" # 这是你mysql服务器的主机名或ip地址
mysql_port = 3306 # 这是你mysql服务器上的端口,3306,mysql就是3306,必须是数字
mysql_user = "" # 这是你mysql数据库上的用户名
mysql_password = "" # 这是你mysql数据库的密码
mysql_db = "" # mysql服务器上的数据库名 Base = declarative_base() class Phones(Base):
__tablename__ = 'phones'
id = Column(Integer, primary_key=True)
name = Column(String(32)) def checkout_listener(dbapi_con, con_record, con_proxy):
try:
try:
dbapi_con.ping(False)
except TypeError:
dbapi_con.ping()
except dbapi_con.OperationalError as exc:
if exc.args[0] in (2006, 2013, 2014, 2045, 2055):
raise DisconnectionError()
else:
raise with SSHTunnelForwarder(
(ssh_host, ssh_port),
ssh_username=ssh_user,
ssh_password=ssh_password,
remote_bind_address=(mysql_host, mysql_port)
) as server:
# server.start() # ssh通道服务启动,用了with语句会自己启动
local_port = str(server.local_bind_port)
engine = create_engine(
'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8'.format(mysql_user, mysql_password, '127.0.0.1', local_port,mysql_db),
pool_size=100,
pool_recycle=3600) event.listen(engine, 'checkout', checkout_listener) # 防止报连接池相关的错误
Base.metadata.create_all(engine) # 检测文件中所有继承了Base类的类,在mysqld中建立所有的表,类就是表
Session = sessionmaker(bind=engine)
session = Session()

sqlalchemy和pymysql通过ssh连接远程mysql服务器的更多相关文章

  1. sqlalchemy通过ssh连接远程mysql服务器

    首先需要一个模块sshtunnel,如果没有直接pip install sshtunnel from sshtunnel import SSHTunnelForwarder from sqlalche ...

  2. ssh连接远程linux服务器

    1.在百度搜索输入"putty"然后进行下载,下载后无需安装只需要在文件中找到"putty.exe"双击即可运行. 2.在"Host Name or ...

  3. Mac下如何用SSH连接远程Linux服务器,centos无法复制粘贴

    CentOS 7.1安装完之后默认已经启动了ssh服务我们可以通过以下命令来查看ssh服务是否启动. 3.2查看22端口是否开放 #netstat -tnl 3.3查看ssh服务是否启动 #syste ...

  4. 第十一章 PhpMyAdmin连接远程mysql服务器---连接openwrt 703N服务器

    //千万不要在你原来的那个phpmyadmin文件夹上操作~~~要复制一个新的进行操作,这样我们就可以同时使用本地和远程   一.下载phpmyadmin到本地 我使用的是windows下的集成WAM ...

  5. Mac下如何用SSH连接远程Linux服务器及Linux一些常用操作命令,更新中.....

    1. 终端命令 a).打开Mac的命令终端,输入 sudo su 按回车 b).输入 ssh root@102.210.86.213 它会提示你输入密码,输入正确的密码之后,你就发现已经登陆成功了. ...

  6. Mac下如何用SSH连接远程Linux服务器

     终端命令 a).打开Mac的命令终端 b).输入ssh -p 22 root@102.210.86.213 它会提示你输入密码,输入正确的密码之后,你就发现已经登陆成功了.(22: 端口号 root ...

  7. jmeter连接配置带跳板机(SSH)的mysql服务器

    jmeter连接配置mysql服务器时,如果数据库服务器没有通过ssh连接,则只需要配置相应的jdbc参数就可以了,即请求域名或ip地址:3306,如果数据库服务器是通过SSH连接的,那需要通过中间远 ...

  8. Mac下ssh连接远程服务器时自动断开问题

    在mac下使用securecrt通过ssh连接远程服务器时,总会一段时间没有动作后,ssh被自动断开.在windows下用xmanager貌似没有遇到过这个问题. 在网上找了解决方法如下: 客户端配置 ...

  9. Windows环境下,本地Oracle创建dblink连接远程mysql

    前言 我的情况是,本地安装了oracle(安装完成后带有SQL Developer,不需要再安装instantclient),创建dblink去连接远程的mysql.有些朋友可能是 本地使用PL\SQ ...

随机推荐

  1. UDK命令

    UDK命令行参数与控制台命令都是大小写不敏感的 命令行  udn中文  udn英文 全词大小写匹配,正则表达式,在c++代码中搜索减号开头的命令行参数(如:-BENCHMARK.-onethread等 ...

  2. AjaxPro2完整入门教程

    一.目录 简单类型数据传送(介绍缓存,访问Session等) 表类型数据传送 数组类型数据传送(包含自定义类型数据) 二.环境搭建 1.这里本人用的是VS2012. 2.新建一个空的Web项目(.NE ...

  3. postgreSQL备份数据

    1.pg_dump 备份单一数据库 pg_dump仅导出数据库结构: pg_dump -U TestRole1 -s -f TestDb1.sql TestDb1 2.全部备份采用pg_dumpall ...

  4. 安装和使用git遇到的问题总结

    一,centos7下安装(因为centos7下用yum安装git的版本太低了,所以只能下载源代码,然后用源代码安装) 下载编译工具 yum -y groupinstall "Developm ...

  5. 用kali执行arp攻击-----------使对方断网

    实现原理 其主要原理是局域网内的"攻击机"通过冒充同网络号下的"受害者主机"的物理地址(mac地址),通过欺骗网关,让网关原来应该发给"受害者主机&q ...

  6. LeetCode算法题-Non-decreasing Array(Java实现)

    这是悦乐书的第283次更新,第300篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第151题(顺位题号是665).给定一个包含n个整数的数组,您的任务是通过修改最多1个元 ...

  7. Springboot项目配置druid数据库连接池,并监控统计功能

    pom.xml配置依赖 <!-- https://mvnrepository.com/artifact/com.alibaba/druid --> <dependency> & ...

  8. RabbitMQ基本示例,轮询机制,no_ack作用

    一.RabbitMQ简介: ''' RabbitMQ就是消息队列 之前不是学了Queue了吗,都是队列还学RabbitMQ干嘛? 干的事情是一样的 Python的Queue有两个, 一个线程Queue ...

  9. Oracle 查询重复索引列

    SELECT /*+ rule */ a .table_owner, a.table_name, a.index_owner, a.index_name, column_name_list, colu ...

  10. 定制json序列化

    最近有人问我怎么定制一个json序列化,使序列化的时候只写出声明的父类成员,而不要把实际子类的成员写出来.当然,序列化用的是大家用的最多的json.net. 简单的说,这是个契约怎么解析的问题,jso ...