Python 使用 MySQLdb 连接并操作 MySQL 数据库实战指南

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

本文详细演示如何使用 Python 的 MySQLdb 模块连接 MySQL 数据库,并完成建表、单条插入、批量写入、数据更新及结果读取等核心操作。重点说明 charset 参数解决中文乱码的逻辑,强调 conn.commit() 提交事务的必要性,并附带常用光标方法的快速查阅指南。

Python 操作 MySQL 数据库的核心实现路径

第1步:初始化连接对象与基础环境搭建(准备条件)

在编写任何数据库操作前,首要任务是建立稳定连接并指定正确的字符集。通过 MySQLdb.connect() 传入主机地址、用户名、密码、目标数据库及端口,即可创建连接对象。为避免中文数据在客户端显示正常而在数据库中存储为乱码,必须在连接参数中显式声明与数据库一致的编码格式(如 utf8 或 gb2312)。

import MySQLdb

try:
    # 建立连接并配置字符集,确保中文读写一致
    conn = MySQLdb.connect(
        host='localhost',
        user='root',
        passwd='root',
        db='test',
        port=3306,
        charset='utf8'
    )
    cur = conn.cursor()
    
    # 创建测试数据库与数据表
    cur.execute('create database if not exists python')
    conn.select_db('python')
    cur.execute('create table test(id int, info varchar(20))')
    
    print("数据库与表结构初始化完成")
    
except MySQLdb.Error as e:
    print("Mysql Error %d: %s" % (e.args[0], e.args[1]))

第2步:执行数据写入与事务提交(真实操作顺序)

数据修改操作必须通过事务机制落地。Python 连接默认处于自动提交关闭状态,所有 INSERT、UPDATE 或 DELETE 语句执行后,必须调用 conn.commit() 才能永久生效,否则回滚或断开连接会导致数据丢失。支持通过占位符 (%s) 传递安全参数,并使用 executemany() 提升批量写入效率。

import MySQLdb

try:
    conn = MySQLdb.connect(host='localhost', user='root', passwd='root', port=3306, charset='utf8')
    conn.select_db('python')
    cur = conn.cursor()
    
    # 1. 单条插入
    value = (1, 'hi rollen')
    cur.execute('insert into test values(%s,%s)', value)
    
    # 2. 批量插入(循环构建元组列表)
    values = []
    for i in range(20):
        values.append((i, 'hi rollen' + str(i)))
    cur.executemany('insert into test values(%s,%s)', values)
    
    # 3. 条件更新
    cur.execute('update test set info="I am rollen" where id=3')
    
    # ⚠️ 关键:务必提交事务,否则上述写入不会真正生效
    conn.commit()
    
    print("数据写入与更新事务已提交")
    
except MySQLdb.Error as e:
    print("Mysql Error %d: %s" % (e.args[0], e.args[1]))
finally:
    cur.close()
    conn.close()

第3步:运行查询语句并提取结果集(完成判断)

查询操作通过 cur.execute() 发送 SQL,返回受影响的行数。获取结果集依赖于光标对象的三个核心方法:fetchone() 读取首行,fetchmany(size) 按指定数量读取,fetchall() 拉取全部剩余数据。配合 cur.scroll(mode) 可灵活重置读取指针位置,便于重复遍历或定位特定记录。

import MySQLdb

try:
    conn = MySQLdb.connect(host='localhost', user='root', passwd='root', port=3306, charset='utf8')
    conn.select_db('python')
    cur = conn.cursor()
    
    count = cur.execute('select * from test')
    print(f'当前表共有 {count} 条记录')
    
    # 读取第一条
    result = cur.fetchone()
    print(f'首条记录 -> ID: {result[0]}, info: {result[1]}')
    
    # 连续读取后续5条
    results = cur.fetchmany(5)
    for row in results:
        print(row)
    
    # 将指针移回结果集第一行(绝对模式)
    cur.scroll(0, mode='absolute')
    
    # 一次性获取全量数据
    all_results = cur.fetchall()
    for r in all_results:
        print(r[1])  # 仅打印 info 字段
    
except MySQLdb.Error as e:
    print("Mysql Error %d: %s" % (e.args[0], e.args[1]))
finally:
    cur.close()
    conn.close()

MySQLdb 核心方法速查参考

掌握以下光标与连接层 API 可覆盖绝大多数常规交互场景:

  • 事务控制:commit() 提交当前事务;rollback() 撤销未提交的修改,常用于异常捕获块中恢复状态。
  • 执行命令:
    - execute(query, args):执行含参数的单条 SQL,返回受影响行数。
    - executemany(query, args_list):复用同一模板执行多组参数,显著提升批量导入性能。
    - callproc(procname, args):调用数据库存储过程,返回影响行数。
  • 结果接收:
    - fetchone():每次提取下一行数据,耗尽返回 None。
    - fetchmany(size=None):最多取出 size 条记录,未指定则按 cursor.arraysize 默认值读取。
    - fetchall():一次性加载剩余所有行至内存列表,适合中小规模数据集。
  • 指针移动:scroll(value, mode):mode 设为 'relative' 时基于当前行偏移,设为 'absolute' 时以结果集第一行为基准跳转。

总结

利用 Python 的 MySQLdb 驱动操作关系型数据库,关键在于理顺连接鉴权、参数化语句防注入、明确事务边界以及合理运用游标取值方法。只要规范书写 try...except...finally 上下文并在最后调用 conn.commit(),即可稳定完成各类数据流转任务。以上就是 Python 使用 MySQLdb 连接并操作 MySQL 数据库的详细内容,更多关于 Python 数据库开发与后端交互的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。