Python连接与操作MySQL数据库实战指南

Noah
Noah
发布时间:2026-10-12 | 2人浏览过
原创

本文详细介绍如何在Python环境中使用mysqlclient库连接MySQL数据库,涵盖环境安装、参数配置、基础CRUD操作及事务提交流程。通过标准代码示例演示如何安全执行插入、更新、查询和删除命令,并解决常见的编码与元组传参问题,助力开发者快速掌握Python与MySQL的数据交互方法。

环境与安装准备

现代Python开发中,官方推荐的MySQL连接器已由早期的MySQL-python迁移为mysqlclient。该库基于C扩展编写,性能优异且完全兼容主流Python版本(3.6+)。模块导入时仍保持MySQLdb命名空间以维持向后兼容。

执行以下命令即可完成依赖安装:

pip install mysqlclient

建立数据库连接与创建游标

连接数据库是操作的基础。推荐使用MySQLdb.connect()方法,传入主机地址、用户名、密码、目标数据库及字符集等关键参数。连接成功后,需调用.cursor()创建游标对象,用于封装SQL指令的执行与结果集获取。

执行基础数据操作

以下是完成增删改查(CRUD)的标准操作流程,所有占位符统一使用%s,由驱动层自动处理类型转换以防御SQL注入。

第1步:执行插入操作

目的:向指定表写入新记录。入口:数据库连接对象。动作:构造含%s占位符的INSERT语句,传入参数元组或列表后调用游标.execute()。重要参数:sql语句模板,params为可迭代对象。完成状态:execute()返回受影响行数,值为1或大于0即表示写入成功。

# -*- coding: utf-8 -*-
import MySQLdb

conn = MySQLdb.connect(host='localhost', user='root', passwd='your_password', db='test_db', charset='utf8mb4')
cursor = conn.cursor()

insert_sql = "INSERT INTO users(name, created_time) VALUES(%s, %s)"
params = ('new_user', 1715000000)
affected_rows = cursor.execute(insert_sql, params)
print(f'插入成功,影响行数:{affected_rows}')
cursor.close()

第2步:执行更新与删除操作

目的:修改或删除现有记录。入口:游标对象。动作:构造含%s占位符的UPDATE/DELETE语句,严格按WHERE条件传递对应值后调用.execute()。重要参数:sql语句,params参数列表/元组。完成状态:execute()返回值>0表示匹配并执行了相应行数的操作。

# 更新操作
update_sql = "UPDATE users SET name=%s WHERE id=%s"
update_params = ('updated_name', 1)
cursor.execute(update_sql, update_params)

# 删除操作
delete_sql = "DELETE FROM users WHERE name=%s"
delete_params = ('name_to_delete',) 
cursor.execute(delete_sql, delete_params)

第3步:执行查询操作

目的:检索数据库中符合条件的数据。入口:游标对象。动作:执行SELECT语句后,使用fetchall()/fetchone()/fetchmany(size)按需读取结果集。重要参数:查询模式(mode)与偏移量(value)。完成状态:结果集以元组嵌套元组形式返回,遍历可输出完整字段值。

cursor.execute("SELECT id, name FROM users")
results = cursor.fetchall()
for row in results:
    print(f'ID: {row[0]}, 姓名: {row[1]}')
cursor.close()

事务管理与连接释放

对于INSERT、UPDATE、DELETE等非查询语句,显式管理事务能保障数据一致性。在执行批量写操作或复杂逻辑时,务必在捕获异常时调用rollback(),成功完成后调用commit()。操作结束后,按顺序关闭游标和连接,释放底层TCP与内存资源。

try:
    conn.autocommit(False) # 关闭自动提交
    cursor.execute(sql1, p1)
    cursor.execute(sql2, p2)
    conn.commit() # 提交事务
except Exception as e:
    conn.rollback() # 失败回滚
    print(f'操作失败: {e}')
finally:
    cursor.close()
    conn.close()

排错与注意事项

1. 中文乱码问题:确保三层编码一致。MySQL服务端my.cnf配置default-character-set=utf8mb4;Python连接参数明确指定charset='utf8mb4';源文件声明# encoding: utf-8。

2. 参数格式报错:当参数仅有一个值时,必须写成单元素元组('value',),不可省略末尾逗号,否则会被解析为字符串导致类型错误。

3. 弃用警告处理:旧版代码中出现的from sets import ...警告源于Python 2.6语法变更,现代mysqlclient已彻底修复,无需手动修改第三方库源码。

总结

以上就是Python使用mysqlclient连接和操作MySQL数据库的详细内容,更多关于Python数据库开发与SQL优化的资料请关注本站其它相关文章!

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表