Python 连接 MySQL 数据库实战指南
1. 引言
在 Python 开发中,与关系型数据库交互是构建数据驱动应用的基础。MySQL 作为广泛使用的开源数据库,通过 Python 的 mysql-connector-python 库可以方便地实现连接、查询、更新及事务管理。本文详细介绍从环境准备到安全最佳实践的完整流程。
本文详细介绍了在 Python 环境中连接 MySQL 数据库的完整流程。内容涵盖驱动安装、建立连接、执行 SQL 语句(查询、插入、更新、删除)、事务提交以及连接关闭等核心操作。通过示例代码展示了如何使用 mysql.connector 库进行参数化查询以防止注入攻击,并介绍了异常处理机制和上下文管理器用法,帮助开发者安全高效地管理数据库交互。

在 Python 开发中,与关系型数据库交互是构建数据驱动应用的基础。MySQL 作为广泛使用的开源数据库,通过 Python 的 mysql-connector-python 库可以方便地实现连接、查询、更新及事务管理。本文详细介绍从环境准备到安全最佳实践的完整流程。
确保已安装 Python 3.6 及以上版本。可通过终端输入 python --version 或 python3 --version 检查。
本地需运行 MySQL 服务器(如 MySQL 8.0)。确保数据库服务处于启动状态,并创建好目标数据库。
使用 pip 安装官方 MySQL Connector/Python:
pip install mysql-connector-python
若网络受限,可尝试国内镜像源:
pip install mysql-connector-python -i https://pypi.tuna.tsinghua.edu.cn/simple
导入模块后,调用 connect() 函数传入连接参数。关键参数包括主机地址、端口、用户名、密码及默认数据库。
import mysql.connector
try:
cnx = mysql.connector.connect(
host="localhost",
port=3306,
user="root",
password="your_password",
database="mydatabase",
charset="utf8mb4"
)
if cnx.is_connected():
print("成功连接到 MySQL 数据库")
except mysql.connector.Error as err:
print(f"连接失败:{err}")
参数说明:
host: 数据库服务器地址,本地通常为 localhost。port: 默认端口 3306。user: 登录用户名。password: 用户密码。database: 指定要操作的数据库名。charset: 推荐 utf8mb4 以支持 Emoji 等特殊字符。连接成功后,需创建游标对象(Cursor)来执行 SQL 命令。
cursor = cnx.cursor()
使用 execute() 执行查询,并通过 fetchall() 获取所有结果集。
query = "SELECT id, name, address FROM customers WHERE age > 18"
cursor.execute(query)
results = cursor.fetchall()
for row in results:
print(f"ID: {row[0]}, Name: {row[1]}, Address: {row[2]}")
为防止 SQL 注入攻击,务必使用参数化查询(占位符 %s),而非字符串拼接。
sql = "INSERT INTO customers (name, address) VALUES (%s, %s)"
val = ("John Doe", "123 Main St")
cursor.execute(sql, val)
更新操作需配合条件判断,删除操作需谨慎处理主键。
# 更新
update_sql = "UPDATE customers SET address = %s WHERE name = %s"
cursor.execute(update_sql, ("New Address", "John Doe"))
# 删除
delete_sql = "DELETE FROM customers WHERE id = %s"
cursor.execute(delete_sql, (1,))
MySQL 默认开启自动提交,但在涉及多步操作时,建议显式控制事务以保证数据一致性。
执行写入操作(Insert/Update/Delete)后,必须调用 commit() 保存更改。
cnx.commit()
若发生错误,应调用 rollback() 撤销本次事务的所有更改。
try:
# 模拟可能出错的操作
cursor.execute("INSERT INTO ...")
cnx.commit()
except Exception:
cnx.rollback()
raise
良好的代码结构应包含异常捕获和连接关闭逻辑,防止资源泄露。
推荐使用 with 语句自动管理游标和连接的关闭。
import mysql.connector
from mysql.connector import Error
try:
with mysql.connector.connect(
host="localhost",
user="root",
password="password",
database="mydatabase"
) as cnx:
with cnx.cursor() as cursor:
cursor.execute("SELECT * FROM users LIMIT 5")
for row in cursor.fetchall():
print(row)
except Error as e:
print(f"数据库错误:{e}")
finally:
# 显式关闭逻辑通常由 with 处理,但可保留用于额外清理
pass
%s 占位符,杜绝字符串拼接。通过本文的学习,您已掌握 Python 连接 MySQL 的核心技能,包括驱动安装、连接配置、CRUD 操作、事务控制及安全规范。在实际项目中,建议结合 ORM 框架(如 SQLAlchemy)进一步提升开发效率,同时保持对底层连接机制的理解以确保性能与安全。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 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