首先需要一个模块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通过ssh连接远程mysql服务器的更多相关文章

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

    首先需要一个模块sshtunnel,如果没有直接pip install sshtunnel 其实连个连接方式非常像: pymysql连接方式: import pymysql from sshtunne ...

  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. [转]学习win10的bash使用ssh连接远程服务器

    1. 前言 微软已经在Win10一周年更新预览版中加入了Ubuntu Bash命令支持,相当于一个小型的linux系统,本来连接远程服务器的话,要使用putty啥的,现在可以用这个直接连接,我来讲讲步 ...

随机推荐

  1. 分享Java的9个知识点

    关于java编程的知识,有人会问哪些是重要的知识点,不知道大家是否都知道呢? 现在兄弟连 小编给大家分享以下9点内容,仔细看咯! 1.多线程并发 多线程是Java中普遍认为比较难的一块.多线程用好了可 ...

  2. 关于脱离laravel框架使用Illuminate/Validation验证器

    1.关于Illuminate/Validation验证器 Validation 类用于验证数据以及获取错误消息. github地址:github.com/illuminate/validation 文 ...

  3. SpringMvc的传递参数方式 -- url / requestMapping

    在使用spring的项目中,前台传递参数到后台是经常遇到的事, 我们必须熟练掌握一些常用的参数传递方式和注解的使用,废话少说,直接上正文. 1. @requestMapping: 类级别和方法级别的注 ...

  4. 06_java 时间获取练习_Date\SimpleDateFormat\Calendar类练习

     1.获取当前的日期,并把这个日期转换为指定格式的字符串,如2088-08-08 08:08:08 import java.text.SimpleDateFormat; import java.uti ...

  5. 【Zabbix】大规模监控误报发生时的处理方案

    今天遇到了这样一件事..Zabbix一直在用的数据库突然间崩溃,无法连接了.在down掉的那一时刻开始,zabbix向管理员报了警.然后随之而来的是铺天盖地的所有主机zabbix agent无法连接的 ...

  6. OpenStreetMap、googleMap等经纬度和行列号之间相互转化

    # OpenStreetMap经纬度转行列号 def deg2num(lat_deg, lon_deg, zoom): lat_rad = math.radians(lat_deg) n = 2.0 ...

  7. RTMP消息详细介绍

    本文继上篇简单分析了RTMP协议如何进行通信进一步详细分析RTMP的消息都有哪些,以及这些消息有什么作用. 一.RMTP消息 由上一篇文章可知RTMP 消息有分成两个部分,一个是头部,一个是有效负载. ...

  8. Beta No.3

    今天遇到的困难: 组员对github极度的不适应 github的版本控制和协同化编程确实操作起来需要一定的熟练度,我们缺乏这种熟练度 Android Studio版本不一致项目难以打开的问题仍然无法解 ...

  9. Beta Scrum Day 5

    听说

  10. 201621123057 《Java程序设计》第13周学习总结

    1. 本周学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. 2. 为你的系统增加网络功能(购物车.图书馆管理.斗地主等)-分组完成 为了让你的系统可以被多个用户通过网 ...