当前位置: 首页 > news >正文

用Python 连接 MySQL数据库测试实战脚本(文中含源代码)

在后端开发、数据处理等场景中,Python 与 MySQL 数据库的交互是非常常见的需求。而建立稳定的数据库连接,是所有后续操作(如数据查询、插入、更新)的前提。

本文将以一段实用的 MySQL 连接测试代码为例,详细讲解如何使用 pymysql 库实现数据库连接测试,并深入分析其中的关键技术点与最佳实践。

一、前置准备:环境与依赖

在开始编写代码前,我们需要先完成环境搭建,确保相关工具和库已正确安装。

1. 安装 MySQL 服务

首先需要在本地或服务器上部署 MySQL 服务:

  • 本地开发:可按照此安装步骤 Windows下详细安装mysql8.0最新版本过程,按向导完成安装,记录下 主机地址(Host)用户名(默认通常为 root) 和 密码

2. 安装 pymysql 库

pymysql 是 Python 中用于操作 MySQL 数据库的第三方库,支持 Python 3.x,语法简洁且兼容性强。通过 pip 命令即可快速安装:

pip install pymysql

二、MySQL 连接测试的核心逻辑

我们先来看完整的连接测试代码,再逐段拆解其核心功能——从参数配置到连接实现,再到异常处理。

1. 完整代码

import pymysqldef test_mysql_connection():"""测试MySQL数据库连接"""# 1. 配置数据库连接参数conn_params = {'host': 'localhost',    # 数据库主机地址(本地为localhost,远程为IP)'user': 'root',         # 数据库用户名'password': 'root',     # 数据库密码(需替换为实际密码)'charset': 'utf8mb4'    # 字符编码(utf8mb4支持emoji,兼容性优于utf8)}try:# 2. 建立数据库连接(使用with语句自动释放连接,避免资源泄漏)with pymysql.connect(**conn_params) as conn:print("✅ MySQL连接成功!")# 3. 检查目标数据库(jbzx)是否存在with conn.cursor() as cursor:# 执行SQL:查询所有数据库中是否包含"jbzx"cursor.execute("SHOW DATABASES LIKE 'jbzx'")# fetchone():获取查询结果的第一条数据(若存在则返回元组,否则返回None)if cursor.fetchone():print("✅ 数据库jbzx已存在!")else:print("ℹ️ 数据库jbzx不存在,请创建!!!")return True# 4. 捕获特定异常:MySQL操作错误(如连接失败、权限不足等)except pymysql.err.OperationalError as e:print(f"❌ MySQL连接失败: {e}")print("\n请检查:")print("1. MySQL服务是否启动")print("2. 用户名和密码是否正确")print("3. 主机地址是否正确(远程连接需检查防火墙和权限)")return False# 5. 捕获其他未知异常except Exception as e:print(f"❌ 发生错误: {e}")return False# 6. 程序入口:仅当脚本直接运行时执行测试
if __name__ == "__main__":print("测试MySQL数据库连接...")test_mysql_connection()

2. 核心逻辑拆解

(1)连接参数配置:conn_params 字典

连接参数是建立 MySQL 连接的“钥匙”,需根据实际环境调整:

参数名

说明

示例值

host

数据库主机地址:本地连接用 localhost,远程连接用服务器 IP 或域名

192.168.1.100
user

登录 MySQL 的用户名(需具备对应权限,如本地测试常用 root

root
password

用户名对应的密码(注意:生产环境中不要硬编码密码,建议用环境变量)

123456
charset

字符编码:utf8mb4 是推荐选择,支持所有 Unicode 字符(包括 emoji)

utf8mb4

补充:若需指定端口(默认端口为 3306,若修改过需添加),可在 conn_params 中增加 'port': 3307(端口号替换为实际值)。

(2)安全的连接方式:with 语句

代码中使用 with pymysql.connect(**conn_params) as conn 建立连接,这是 Python 中的“上下文管理器”用法,优势在于:

  • 自动释放资源:无论连接成功后是否发生异常,with 语句都会自动关闭连接,避免因忘记 conn.close() 导致的数据库连接泄漏。

  • 简化代码:无需手动管理连接的“打开-关闭”生命周期,减少冗余代码。

(3)检查数据库是否存在:SHOW DATABASES

在连接成功后,代码通过 cursor(游标)执行 SQL 语句,检查目标数据库 jbzx 是否存在:

  1. 创建游标with conn.cursor() as cursor,游标是执行 SQL 语句的工具,同样通过 with 语句自动关闭。

  2. 执行 SQLcursor.execute("SHOW DATABASES LIKE 'jbzx'")SHOW DATABASES 用于列出所有数据库,LIKE 'jbzx' 是模糊匹配(此处精确匹配,因无通配符)。

  3. 获取结果cursor.fetchone() 从查询结果中获取第一条数据——若存在 jbzx 数据库,返回 ('jbzx',);否则返回 None

(4)异常处理:覆盖常见错误场景

代码通过 try-except 捕获两类异常,确保程序不崩溃且能给出明确的错误提示:

  1. pymysql.err.OperationalError:MySQL 操作错误,是连接阶段最常见的异常,可能原因包括:

    • MySQL 服务未启动(本地连接);

    • 用户名/密码错误;

    • 主机地址错误或远程连接被防火墙拦截;

    • 目标 MySQL 实例未授权该用户访问(如远程连接需执行 GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password'; 授权)。

  2. Exception:捕获其他未知异常(如 SQL 语法错误、网络波动等),避免程序因未预料到的错误终止。

三、最终效果

执行上面代码最终效果:

图片

四、常见问题与排查思路

在使用 pymysql 连接 MySQL 时,可能会遇到各种问题,以下是常见场景的排查方法:

错误现象

可能原因

排查步骤

连接超时,提示 TimeoutError

1. 主机地址错误;2. 防火墙拦截 3306 端口;3. MySQL 服务未启动

1.  ping 主机地址,确认网络可达;2. 检查服务器防火墙(如 ufw status);3. 本地执行 systemctl status mysql 查看服务状态

提示 Access denied for user

1. 用户名/密码错误;2. 用户无访问权限(如远程连接用本地用户)

1. 核对用户名和密码;2. 远程连接需授权:GRANT ALL ON *.* TO 'user'@'%' IDENTIFIED BY 'pwd'; FLUSH PRIVILEGES;

提示 Unknown database

目标数据库不存在

1. 执行 SHOW DATABASES; 确认数据库列表;2. 检查数据库名拼写是否正确

字符乱码

1. 连接时未指定 charset;2. 数据库默认编码不是 utf8mb4

1. 连接参数添加 charset='utf8mb4';2. 执行 ALTER DATABASE jbzx CHARACTER SET utf8mb4; 修改数据库编码

五、总结

本文通过一段 pymysql 连接测试代码,详细讲解了 Python 与 MySQL 连接的核心逻辑——从环境搭建、参数配置,到连接实现、异常处理。关键要点总结如下:

  1. 安全连接:使用 with 语句自动管理连接和游标,避免资源泄漏;

  2. 敏感信息保护:不硬编码密码,通过环境变量传递;

  3. 异常处理:针对性捕获 OperationalError 等常见异常,提供明确的错误提示;

  4. 代码复用:封装工具类,提高连接逻辑的可复用性。


文章转载自:

http://xdugpcZb.drhnj.cn
http://RnNdmUlX.drhnj.cn
http://Mf3iUqaf.drhnj.cn
http://85R3Vlqd.drhnj.cn
http://8OgLAHdk.drhnj.cn
http://aIFBDX9l.drhnj.cn
http://jLfkkae0.drhnj.cn
http://xCLqPcok.drhnj.cn
http://Br9Ql9GA.drhnj.cn
http://Y6K4mAcG.drhnj.cn
http://CTldJvIy.drhnj.cn
http://erMeVsvB.drhnj.cn
http://zlUXv6gm.drhnj.cn
http://BdLVr4lU.drhnj.cn
http://OUMS7gGh.drhnj.cn
http://qeoJOkB4.drhnj.cn
http://LcMmP4Re.drhnj.cn
http://eakiyBRn.drhnj.cn
http://9WxSGciw.drhnj.cn
http://alqRpCgK.drhnj.cn
http://yQI0yRHC.drhnj.cn
http://k4hGOhP7.drhnj.cn
http://WUwIv0jJ.drhnj.cn
http://U5XsxqNQ.drhnj.cn
http://oeS33Fnu.drhnj.cn
http://rnNMObEq.drhnj.cn
http://tKLMiBkO.drhnj.cn
http://4BdgVsBN.drhnj.cn
http://Ys16NEap.drhnj.cn
http://Xfoy4djA.drhnj.cn
http://www.dtcms.com/a/387460.html

相关文章:

  • vue中下载文件保存格式和加密方式
  • typescript和vue和node项目的构建打包部署
  • Chat2DB+cpolar组合突破物理限制,成为数据库查询新解
  • Power BI 组件 AI Chart 技术解析:自然语言驱动的可视化革新
  • 【Linux网络】网络传输基本流程
  • 【开题答辩全过程】以 Boss直聘网站数据分析与可视化为例,包含答辩的问题和答案
  • 基于 Node.js 的后端框架:NestJS 和 Express(一)
  • Python 2025:现代Web开发与数据分析的融合新趋势
  • 数据可视化:点亮数据背后的价值
  • 微信小程序答题考试源码系统+独立部署教程 适配学校 / 企业 / 培训机构
  • Apache JMeter介绍(开源的性能测试工具,主要用于对软件系统、服务器、网络或对象进行压力测试和性能测试)
  • 叠衣服的最优解:机器人如何用语言指令完成复杂家务
  • jmeter 数据库连接配置 JDBC Connection Configuration
  • 神经网络与深度学习基础:从线性回归到分类模型
  • Jmeter 参数、设置相关
  • jmeter 提取变量设置为全局变量
  • open61499:重新定义工业编程,让复杂自动化变简单
  • 基于MATLAB的支持向量数据描述算法
  • 超越重命名:如何利用高级规则实现文件的精准自动化分类保存
  • Spring Cloud Gateway:一次不规范 URL 引发的路由转发404问题排查
  • C#开发常用方法汇总(类型转换)
  • 从踩坑到高效选型:基于 AI Ping 平台的 20+MaaS 供应商、220 + 模型服务性能(延迟 / 吞吐 / 可靠性):深度评测与大模型选型指南
  • LeetCode刷题记录----347.前K个高频元素(Medium)
  • Windows 部署hexo并启动自己的博客
  • 建议对下载的geo原始数据进行低表达基因过滤**,这是数据预处理的关键步骤之一,可提升后续分析(如差异表达、WGCNA)的准确性和可靠性
  • MySQL 数据库备份与恢复
  • SQLite 数据库简介
  • Java进阶教程,全面剖析Java多线程编程,线程的优先级,笔记07
  • YOLOv12目标检测:使用自定义数据集训练 YOLOv12 检测坑洞严重程度
  • 计算机操作系统学习(五、输入输出管理)