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

Python PyMySQL【mysql适配器】 简介

幸运转盘


PyMySQL 是一个纯 Python 实现的 MySQL 客户端库,用于在 Python 3.x 中操作 MySQL 数据库(兼容 MySQL 5.5+ 和 MariaDB)。它遵循 Python DB-API 2.0 规范(PEP 249),提供了简洁的 API 与 MySQL 交互,无需依赖 MySQL 官方 C 库。


核心特性

  1. 纯 Python 实现
    • 无需编译或外部依赖,跨平台支持(Windows/Linux/macOS)。
  2. 支持 Python 3
    • 兼容 Python 3.6+(官方已停止对 Python 2 的支持)。
  3. 安全连接
    • 支持 SSL 加密通信。
  4. 完整事务支持
    • 提供 ACID 事务操作(commit()/rollback())。
  5. 高效数据操作
    • 支持参数化查询、批量插入、存储过程调用等。
  6. 错误处理
    • 抛出标准 Error 异常(如 IntegrityErrorOperationalError)。

安装方法

pip install pymysql

基础使用示例

1. 连接数据库
import pymysql# 建立数据库连接
connection = pymysql.connect(host='localhost',      # 主机名user='your_username',  # 用户名password='your_pwd',   # 密码database='test_db',    # 数据库名charset='utf8mb4',     # 字符集cursorclass=pymysql.cursors.DictCursor  # 返回字典形式的结果
)
2. 执行 SQL 查询
try:with connection.cursor() as cursor:# 创建表cursor.execute("""CREATE TABLE IF NOT EXISTS users (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(50),email VARCHAR(100))""")# 插入数据(参数化查询防注入)sql = "INSERT INTO users (name, email) VALUES (%s, %s)"cursor.execute(sql, ('Alice', 'alice@example.com'))# 批量插入data = [('Bob', 'bob@test.com'), ('Charlie', 'charlie@abc.org')]cursor.executemany(sql, data)# 提交事务connection.commit()finally:# 关闭连接connection.close()
3. 查询数据
with connection.cursor() as cursor:cursor.execute("SELECT * FROM users WHERE name LIKE %s", ('A%',))results = cursor.fetchall()  # 获取所有记录for row in results:print(row['id'], row['name'], row['email'])# 其他获取方式# row = cursor.fetchone()   # 获取单条记录# rows = cursor.fetchmany(5) # 获取指定数量记录

关键对象

对象说明
Connection代表与数据库的连接,管理事务和游标创建
Cursor执行 SQL 并获取结果。常用类型:Cursor(元组结果)、DictCursor(字典结果)
Error异常基类(如 IntegrityErrorInternalError

事务管理

try:with connection.cursor() as cursor:cursor.execute("UPDATE accounts SET balance = balance - 100 WHERE user_id = 1")cursor.execute("UPDATE accounts SET balance = balance + 100 WHERE user_id = 2")connection.commit()  # 提交事务
except:connection.rollback()  # 出错时回滚raise

安全注意事项

  • 禁止拼接 SQL:使用参数化查询(%s 占位符)防止 SQL 注入:
    # 正确做法(安全)
    cursor.execute("SELECT * FROM users WHERE id = %s", (user_id,))# 错误做法(危险!)
    cursor.execute(f"SELECT * FROM users WHERE id = {user_id}")
    

常用扩展

  • 连接池:使用 DBUtils + PyMySQL 实现连接池:
    from dbutils.pooled_db import PooledDB
    pool = PooledDB(pymysql, host='localhost', user='root', database='test')
    connection = pool.connection()
    

适用场景

  • Web 后端开发(Django/Flask 的 MySQL 驱动)
  • 数据分析/ETL 管道
  • 自动化脚本操作数据库

📌 提示:若需更高性能(特别是大数据场景),可考虑 C 扩展库 mysqlclient(API 与 PyMySQL 兼容)。

通过 PyMySQL,开发者能快速、安全地在 Python 中操作 MySQL 数据库,平衡了易用性与功能完整性。

http://www.lryc.cn/news/572368.html

相关文章:

  • leetcode:461. 汉明距离(python3解法,数学相关算法题)
  • 在 Mac 上配置 Charles,抓取 iOS 手机端接口请求
  • wordpress小语种网站模板
  • MOS管和比较器
  • IMU介绍
  • openKylin高校沙龙 | 走进成都高校,推动开源技术交流与人才培养
  • 远程调试,以及Debug与info的区别
  • OpenCV——直方图与匹配
  • OpenGL ES 设置光效效果
  • 输入url之后发生了什么
  • c++ STL---vector使用
  • 为什么 C++ 11 引入了 `nullptr`
  • day037-openssh服务与http协议
  • 2025实时数据同步:多平台商品信息接口的高效更新技术解析
  • jquery 赋值时不触发change事件解决——仙盟创梦IDE
  • Python——PyQt5初体验
  • LVS 负载均衡群集
  • LeetCode | 二分法题型详解+图解
  • bos_token; eos_token; pad_token是什么
  • QSqlDatabase: QSQLITE driver not loaded
  • infinisynapse 使用清华源有问题的暂时解决方法:换回阿里云源并安装配置PPA
  • LoRA 浅析
  • Python Beautiful Soup 4【HTML/XML解析库】 简介
  • StableDiffusion实战-手机壁纸制作 第一篇:从零基础到生成艺术品的第一步!
  • Hexo 个人博客配置记录(GitHub Pages + Butterfly 主题 + Waline 评论 + 自动部署)
  • Kernel K-means:让K-means在非线性空间“大显身手”
  • 职坐标IT培训:嵌入式AI物联网开源项目精选
  • 基于大模型的急性结石性胆囊炎全流程预测与诊疗方案研究
  • 【图像处理入门】11. 深度学习初探:从CNN到GAN的视觉智能之旅
  • 跟着AI学习C# Day22