pymysql连接数据库及通过SSH跳板机连接数据库

pymysql连接数据库及通过SSH跳板机连接数据库

参考资料:

sshtunnel官方文档  https://pypi.org/project/sshtunnel/

pymysql 通过ssh连接 mysql服务器   https://hacpai.com/article/1573725286491

SSHTunnelForwarder隧道连接mysql  https://blog.csdn.net/helloxiaozhe/article/details/77850367

通过账号密码直接连接:

# 打开数据库连接 主机地址 端口号3306 用户名 密码 数据库名
db = pymysql.connect(host="10.12.112.102", port=3309, user="qa_dev", passwd="xxx", db="wechat_test", charset="utf8")
# 创建一个游标对象 cursor()
cursor = db.cursor()
# SQL查询语句
sql = "SELECT * FROM city WHERE city_id = '336'"
try:
    cursor.execute(sql)
    results = cursor.fetchall()
except:
    print("语句执行错误")
# 关闭数据库
db.close()

通过ssh跳板机连接数据库:

1、出于安全考虑,数据库服务器只允许堡垒机通过ssh访问,MySQL数据库安装在A机器上,只允许服务器B访问,而我在C机器上可以通过SSH连接B服务器

如图所示:    

2、代码示例      A:mysql 服务   B:跳板机  C:本地访问机器

import pymysql
from sshtunnel import SSHTunnelForwarder

with SSHTunnelForwarder(
    ssh_address_or_host=('sa.xxxx.cn', 22),       # ssh 目标服务器 ip 和 port
    ssh_username="zhaoxxx",     # ssh 目标服务器用户名
    #ssh_password= "",           # ssh 目标服务器用户密码
    ssh_pkey="C:\\Users\\Administrator\\.ssh\\id_rsa",   # ssh 目标服务器证书
    #ssh_private_key_password="",  # ssh 目标服务器证书密码
    remote_bind_address=('10.10.xx.xxx', 3306),     # mysql 服务ip 和 part
    local_bind_address=('127.0.0.1', 5143)                     # ssh 目标服务器的用于连接 mysql 或 redis 的端口,该 ip 必须为 127.0.0.1
) as server:
    conn = pymysql.connect(
        host=server.local_bind_host,                # server.local_bind_host 是 参数 local_bind_address 的 ip
        port=server.local_bind_port,                # server.local_bind_host 是 参数 local_bind_address 的 port
        user="name",
        password="password",
        db="test_data",
        charset="utf8"
    )
    cursor = conn.cursor()
    sql = "SELECT * FROM satel_report WHERE id = 1"
    try:
        cursor.execute(sql)
        data = cursor.fetchall()
        print(data)
    except:
        print("SQL执行失败")

3、注意事项

    (0) charset是要跟数据库的编码一样

    (1) ssh_pkey="C:\Users\XXXX\.ssh\证书"SSH 连接使用密钥证书登录,该参数必须该路径为目标服务器的公钥证书。window 秘钥ppk不能识别,需要id_rsa

    (2) local_bind_address=('127.0.0.1', 5141)该参数必须SSH 目标服务器的用于连接 MySQL 或 Redis 的端口该 ip 必须为 127.0.0.1

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Flask中使用PyMySQL连接数据库的步骤如下: 1. 安装PyMySQL库:可以使用pip install pymysql命令进行安装。 2. 在Flask应用中导入PyMySQL库:可以使用import pymysql语句进行导入。 3. 创建数据库连接:使用pymysql.connect()函数创建数据库连接对象,需要传入数据库的主机名、用户名、密码、数据库名等参数。 4. 创建游标对象:使用连接对象的cursor()方法创建游标对象,用于执行SQL语句。 5. 执行SQL语句:使用游标对象的execute()方法执行SQL语句。 6. 提交事务:使用连接对象的commit()方法提交事务。 7. 关闭游标和连接:使用游标对象的close()方法和连接对象的close()方法关闭游标和连接。 示例代码如下: ```python import pymysql from flask import Flask app = Flask(__name__) @app.route('/') def index(): # 创建数据库连接 conn = pymysql.connect(host='localhost', user='root', password='123456', database='test', charset='utf8') # 创建游标对象 cursor = conn.cursor() # 执行SQL语句 cursor.execute('select * from user') # 获取查询结果 result = cursor.fetchall() # 提交事务 conn.commit() # 关闭游标和连接 cursor.close() conn.close() return str(result) if __name__ == '__main__': app.run() ``` 在上面的示例中,我们创建了一个Flask应用,并在路由函数中使用PyMySQL连接数据库,执行了一个查询语句,并将查询结果返回给客户端。注意,在实际开发中,我们应该将数据库连接的创建和关闭放在try...finally语句中,以确保连接和游标对象能够被正确关闭。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值