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 库。
核心特性
- 纯 Python 实现
- 无需编译或外部依赖,跨平台支持(Windows/Linux/macOS)。
- 支持 Python 3
- 兼容 Python 3.6+(官方已停止对 Python 2 的支持)。
- 安全连接
- 支持 SSL 加密通信。
- 完整事务支持
- 提供 ACID 事务操作(
commit()
/rollback()
)。
- 提供 ACID 事务操作(
- 高效数据操作
- 支持参数化查询、批量插入、存储过程调用等。
- 错误处理
- 抛出标准
Error
异常(如IntegrityError
、OperationalError
)。
- 抛出标准
安装方法
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 | 异常基类(如 IntegrityError 、InternalError ) |
事务管理
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 数据库,平衡了易用性与功能完整性。