python连接数据库倘若只是单纯的连接本地虚拟机或是主机上的数据库的话,只需要利用pymysql模块访问目标IP即可,因为此时数据库是处于同个网段的。
但是当连接购买的服务器的时候,则需要通过ssh通道来连接。此时我们需要利用sshtunnel模块来连接服务器,然后再通过pymysql来连接数据库。
安装sshtunnel
pip install sshtunnel
导入sshtunnel模块的SSHTunnelForwarder
from sshtunnel import SSHTunnelForwarder
声明配置变量
- ssh_host:服务器的公网IP,字符串
- ssh_port:服务器的端口号,一般为22,数字
- ssh_user:服务器的名字,字符串
- ssh_passwor:服务器登录密码,字符串
- mysql_host:mysql服务器ip,固定填 ‘localhost’ 或 ‘127.0.0.1’,字符串
- mysql_port:mysql的端口,一般为3306,数字
- mysql_user:mysql数据库用户名,例root,字符串
- mysql_password:mysql数据库的密码,字符串
- mysql_db:连接的目标数据库名,字符串
建立ssh隧道
- 利用已声明好的变量,建立ssh隧道连接
with SSHTunnelForwarder(
(ssh_host, ssh_port),
ssh_username=ssh_user,
ssh_password=ssh_password,
remote_bind_address=(mysql_host, mysql_port)) as server:
建立mysql连接
- 依旧利用变量,用pymysql来连接
conn = pymysql.connect(host = mysql_host,
port=server.local_bind_port,
user=mysql_user,
passwd=mysql_password,
db=mysql_db)
- 连接成功后,操作数据库步骤不变
关闭ssh连接
server.close()
cursor.close()
注意!!!
- 在建立ssh隧道和取得mysql连接过程中,务必确认好python的缩进格式结构,否则很可能出现连接中断的异常
- 完整的带缩进的代码如下
# coding=utf-8
import pymysql
from sshtunnel import SSHTunnelForwarder
ssh_host = "server_ip" # 堡垒机ip地址或主机名
ssh_port = 22 # 堡垒机连接mysql服务器的端口号,一般都是22,必须是数字
ssh_user = "ubuntu" # 这是你在堡垒机上的用户名
ssh_password = "server_pwd" # 这是你在堡垒机上的用户密码
mysql_host = "127.0.0.1" # 这是你mysql服务器的主机名或ip地址
mysql_port = 3306 # 这是你mysql服务器上的端口,3306,mysql就是3306,必须是数字
mysql_user = "mysql_user" # 这是你mysql数据库上的用户名
mysql_password = "mysql_pwd" # 这是你mysql数据库的密码
mysql_db = "db_name" # 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 students")
data = cursor.fetchall()
for row in data:
name = row[1]
birth = row[2]
print("Name = %s, birth = %s"%(name,birth))
conn.commit()
server.close()
cursor.close()
这篇博客介绍了如何在Python中使用sshtunnel模块创建SSH隧道,以便连接到远程服务器上的MySQL数据库。首先需要安装sshtunnel,然后声明配置变量,包括SSH服务器和MySQL数据库的相关信息。接着建立SSH隧道,再通过pymysql建立数据库连接。最后,要注意代码的缩进以避免连接错误。
180

被折叠的 条评论
为什么被折叠?



