Python连接服务器数据库

这篇博客介绍了如何在Python中使用sshtunnel模块创建SSH隧道,以便连接到远程服务器上的MySQL数据库。首先需要安装sshtunnel,然后声明配置变量,包括SSH服务器和MySQL数据库的相关信息。接着建立SSH隧道,再通过pymysql建立数据库连接。最后,要注意代码的缩进以避免连接错误。

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()
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值