跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Python

PyMySQL 详解:Python 连接 MySQL 数据库实战

PyMySQL 是一个纯 Python 实现的 MySQL 数据库连接库,无需 C 语言依赖。内容涵盖安装方法、数据库连接配置、数据查询与增删改操作、事务管理及游标类型选择。文章强调使用参数化查询防止 SQL 注入,提供常见错误处理示例,并给出批量操作、连接池和流式查询等性能优化建议,助力开发者在 Python 环境中高效与 MySQL 交互。

月光旅人发布于 2026/3/15更新于 2026/10/26102 浏览
PyMySQL 详解:Python 连接 MySQL 数据库实战

前言

PyMySQL 是一个纯 Python 的库,用于连接 MySQL 数据库,并执行 SQL 语句。它是 MySQLdb 的替代品,但不同于后者,PyMySQL 不需要 C 语言的依赖,因此更加轻量且易于安装和使用。该库的主要用途是通过 Python 代码与 MySQL 数据库进行交互,比如执行查询、插入数据、更新数据、删除数据等操作。

一、PyMySQL 的特点

该库的特点主要有以下三点:

  • 纯 Python 实现:不需要依赖 C 扩展库,可以轻松在各类系统上使用,如 Windows、Linux、macOS 等。
  • 兼容性强:支持 MySQL 5.x 和 MySQL 8.x 版本,也兼容 MariaDB。
  • 易用性:提供了与 MySQLdb 类似的 API,便于用户从 MySQLdb 迁移过来。

二、安装

PyMySQL 可以通过 pip 轻松安装:

pip install pymysql

三、基本用法

(一)连接 MySQL 数据库

在使用 PyMySQL 之前,你需要先连接到 MySQL 数据库。连接数据库时,通常需要提供数据库的主机地址、用户名、密码、数据库名等信息。

示例:

import pymysql

# 创建连接
connection = pymysql.connect(
    host='localhost',
    user='your_username',
    password='your_password',
    database='your_dbname',
    charset='utf8mb4',
    cursorclass=pymysql.cursors.DictCursor
)

# 创建游标
cursor = connection.cursor()

# 关闭游标和连接
cursor.close()
connection.close()

(二)数据查询

使用游标对象来执行 SQL 查询并获取数据。

示例:

try:
    # 创建游标
    with connection.cursor() as cursor:
        # SQL 查询
        sql = "SELECT * FROM users WHERE age > %s"
        cursor.execute(sql, (25,))
        # 使用参数化查询防止 SQL 注入
        # 获取结果
        results = cursor.fetchall()
        # 返回所有结果
        for row in results:
            (row)
:
    
    connection.close()
print
finally
# 关闭连接

(三)插入数据

执行插入操作时,可以使用 execute() 或 executemany() 方法。

示例:

try:
    with connection.cursor() as cursor:
        # SQL 插入语句
        sql = "INSERT INTO users (name, age, email) VALUES (%s, %s, %s)"
        # 执行单条插入
        cursor.execute(sql, ('John Doe', 30, '[email protected]'))
        # 执行多条插入
        users = [
            ('Alice', 25, '[email protected]'),
            ('Bob', 28, '[email protected]')
        ]
        cursor.executemany(sql, users)
        # 提交更改
        connection.commit()
finally:
    connection.close()

(四)更新和删除数据

类似于插入数据,更新和删除数都是通过 SQL 语句和 execute() 函数来完成。

  • 更新数据

示例:

try:
    with connection.cursor() as cursor:
        # SQL 更新语句
        sql = "UPDATE users SET email = %s WHERE name = %s"
        cursor.execute(sql, ('[email protected]', 'John Doe'))
        # 提交更改
        connection.commit()
finally:
    connection.close()
  • 删除数据

示例:

try:
    with connection.cursor() as cursor:
        # SQL 删除语句
        sql = "DELETE FROM users WHERE name = %s"
        cursor.execute(sql, ('John Doe',))
        # 提交更改
        connection.commit()
finally:
    connection.close()

(五)事务管理

MySQL 数据库支持事务,PyMySQL 默认启用了自动提交。如果你需要手动控制事务,可以关闭自动提交并在合适的时机提交或回滚。

示例:

try:
    # 关闭自动提交
    connection.autocommit(False)
    with connection.cursor() as cursor:
        # SQL 插入语句
        sql = "INSERT INTO users (name, age, email) VALUES (%s, %s, %s)"
        cursor.execute(sql, ('Chris', 27, '[email protected]'))
        # 人为错误,测试回滚
        raise Exception("人为触发异常")
        # 提交事务
        connection.commit()
except Exception as e:
    print(f"出现错误:{e}")
    # 回滚事务
    connection.rollback()
finally:
    connection.close()

四、游标类型

PyMySQL 提供了多种游标类型,适用于不同的场景:

  • 默认游标:返回元组格式的结果。
  • 字典游标 (DictCursor):返回字典格式的结果,字段名作为键。
  • SSCursor:流式游标,用于处理大数据量时,避免一次性加载大量数据到内存。

使用不同游标类型可以通过 cursorclass 参数指定。例如:

# 字典游标
connection = pymysql.connect(
    host='localhost',
    user='your_username',
    password='your_password',
    database='your_dbname',
    charset='utf8mb4',
    cursorclass=pymysql.cursors.DictCursor
)

五、安全性

为了防止 SQL 注入攻击,务必使用参数化查询,而不是将参数直接拼接到 SQL 字符串中。

示例:

# 不安全的写法
sql = f"SELECT * FROM users WHERE name = '{name}'"
# 容易导致 SQL 注入

# 安全的写法
sql = "SELECT * FROM users WHERE name = %s"
cursor.execute(sql, (name,))

六、常见错误处理

PyMySQL 中常见的错误处理可以通过捕获异常来完成:

import pymysql

try:
    connection = pymysql.connect(host='localhost', user='root', database='test_db')
    cursor = connection.cursor()
except pymysql.MySQLError as e:
    print(f"数据库连接失败:{e}")

七、性能优化

  • 使用批量操作:如插入数据时,使用 executemany() 批量插入,减少数据库的交互次数。
  • 连接池:在大规模应用中,可以通过第三方库如 DBUtils 或 SQLAlchemy 提供的连接池来优化数据库连接的复用性。
  • 流式查询:对于大规模查询,使用 SSCursor 流式游标,避免一次性加载所有数据到内存。

八、总结

PyMySQL 是一个轻量级、易于使用的 Python 库,适合 Python 程序员与 MySQL 数据库进行交互。通过它,你可以高效地执行 SQL 查询、插入、更新和删除数据操作,同时还可以利用其事务支持、游标控制等高级功能。

目录

  1. 前言
  2. 一、PyMySQL 的特点
  3. 二、安装
  4. 三、基本用法
  5. (一)连接 MySQL 数据库
  6. 创建连接
  7. 创建游标
  8. 关闭游标和连接
  9. (二)数据查询
  10. (三)插入数据
  11. (四)更新和删除数据
  12. (五)事务管理
  13. 四、游标类型
  14. 字典游标
  15. 五、安全性
  16. 不安全的写法
  17. 容易导致 SQL 注入
  18. 安全的写法
  19. 六、常见错误处理
  20. 七、性能优化
  21. 八、总结

更多推荐文章

查看全部
  • 基于 Java 的校园车辆管理系统设计与实现
  • Spring Boot + EasyExcel 实现 Excel 导入导出
  • macOS 微信双开/多开实战指南(支持 4.X+)
  • 从零开始创建 cli-progress 自定义预设:打造个性化进度条样式
  • 全国计算机等级考试二级 Python 历年真题及参考答案(综合应用题)
  • 鸿蒙 ArkTS 与 Java 跨平台 TCP 通信实战
  • Spring Boot 项目用户模块设计:注册登录、权限管控与敏感数据加密
  • 基于 Spring Boot 和 Leaflet 的省级旅游口号 WebGIS 可视化实现
  • IDEA/WebStorm 切换分支方法
  • 宜搭低代码高级认证实操:待办列表功能实现
  • TongWeb 嵌入式版本安装指南
  • Web 前端入门:HTML 核心语法与常用标签详解
  • Ghostty + Yazi + Lazygit 打造高效终端工作流
  • 傅里叶变换:FFT 与 DFT 原理及算法详解
  • JMeter 接口并发测试入门教程
  • OpenClaw 安全最佳实践:保护 AI 与数据
  • ES6 语法详解:进制、Symbol 与 Class
  • AMD 显卡 AI 绘画:ComfyUI-Zluda 配置手册
  • Node.js 安装教程及环境变量配置指南
  • WebStorm 安装与配置指南

相关免费在线工具

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online