前言
PyMySQL 是一个纯 Python 的库,用于连接 MySQL 数据库,并执行 SQL 语句。它是 的替代品,但不同于后者, 不需要 C 语言的依赖,因此更加轻量且易于安装和使用。该库的主要用途是通过 Python 代码与 MySQL 数据库进行交互,比如执行查询、插入数据、更新数据、删除数据等操作。
PyMySQL 是一个纯 Python 实现的 MySQL 数据库连接库,无需 C 语言依赖。内容涵盖安装方法、数据库连接配置、数据查询与增删改操作、事务管理及游标类型选择。文章强调使用参数化查询防止 SQL 注入,提供常见错误处理示例,并给出批量操作、连接池和流式查询等性能优化建议,助力开发者在 Python 环境中高效与 MySQL 交互。

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

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online
MySQLdbPyMySQL该库的特点主要有以下三点:
MySQLdb 类似的 API,便于用户从 MySQLdb 迁移过来。PyMySQL 可以通过 pip 轻松安装:
pip install pymysql
在使用 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:
print(row)
finally:
# 关闭连接
connection.close()
执行插入操作时,可以使用 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):返回字典格式的结果,字段名作为键。使用不同游标类型可以通过 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 查询、插入、更新和删除数据操作,同时还可以利用其事务支持、游标控制等高级功能。