1. Python操作MySQL基础指南MySQLdb模块详解作为Python开发者我们经常需要与数据库交互。MySQL作为最流行的开源关系型数据库之一与Python的结合使用尤为常见。MySQLdb是Python连接MySQL数据库的传统模块虽然现在有更多现代替代方案但理解它的使用仍然很有价值。注意MySQLdb模块需要单独安装不包含在Python标准库中。在Python 3.x环境中你可能需要使用mysqlclientMySQLdb的兼容分支或PyMySQL等替代方案。1.1 MySQLdb模块简介MySQLdb是Python DB-API 2.0规范的MySQL实现它提供了完整的数据库连接管理SQL语句执行能力事务支持结果集处理功能这个模块底层基于MySQL C API开发因此性能较好但安装过程可能比其他纯Python实现的驱动稍复杂。2. 环境准备与安装2.1 安装MySQLdb模块在开始之前你需要确保已安装Python建议3.6版本已安装MySQL服务器或可以访问MySQL服务有足够的权限安装Python包安装方法# 对于Python 2.x pip install MySQL-python # 对于Python 3.x pip install mysqlclient如果遇到编译错误可能需要先安装系统依赖# Ubuntu/Debian sudo apt-get install python3-dev libmysqlclient-dev # CentOS/RHEL sudo yum install python3-devel mysql-devel2.2 验证安装安装完成后可以通过以下代码验证import MySQLdb print(MySQLdb.__version__)如果没有报错并显示版本号说明安装成功。3. 基本数据库操作3.1 建立数据库连接import MySQLdb # 基本连接方式 db MySQLdb.connect( hostlocalhost, # 数据库服务器地址 userusername, # 用户名 passwdpassword, # 密码 dbdatabase_name,# 数据库名 charsetutf8mb4, # 字符集 port3306 # 端口默认3306 ) # 获取游标 cursor db.cursor()重要提示生产环境中不要将密码硬编码在代码中应该使用环境变量或配置文件管理敏感信息。3.2 执行SQL查询# 执行简单查询 cursor.execute(SELECT VERSION()) data cursor.fetchone() print(Database version:, data[0]) # 执行带参数的查询 sql SELECT * FROM users WHERE id %s cursor.execute(sql, (user_id,))3.3 处理结果集MySQLdb提供了几种获取结果的方法# 获取单条记录 record cursor.fetchone() # 获取多条记录指定数量 records cursor.fetchmany(size10) # 获取所有记录 all_records cursor.fetchall() # 获取列信息 columns [desc[0] for desc in cursor.description]4. 数据操作实践4.1 插入数据try: sql INSERT INTO users (name, email) VALUES (%s, %s) cursor.execute(sql, (张三, zhangsanexample.com)) db.commit() # 提交事务 except Exception as e: db.rollback() # 出错时回滚 print(插入失败:, e)4.2 更新数据try: sql UPDATE users SET email %s WHERE id %s cursor.execute(sql, (new_emailexample.com, user_id)) db.commit() print(f影响了{cursor.rowcount}行) except Exception as e: db.rollback() print(更新失败:, e)4.3 删除数据try: sql DELETE FROM users WHERE id %s cursor.execute(sql, (user_id,)) db.commit() print(f删除了{cursor.rowcount}条记录) except Exception as e: db.rollback() print(删除失败:, e)5. 事务处理MySQLdb支持标准的事务操作try: # 开始事务自动 cursor.execute(UPDATE accounts SET balance balance - 100 WHERE id 1) cursor.execute(UPDATE accounts SET balance balance 100 WHERE id 2) db.commit() # 提交事务 except Exception as e: db.rollback() # 回滚事务 print(事务执行失败:, e)6. 高级特性与优化6.1 使用字典游标from MySQLdb.cursors import DictCursor db MySQLdb.connect(..., cursorclassDictCursor) cursor db.cursor() cursor.execute(SELECT * FROM users) for row in cursor: print(row[id], row[name]) # 通过列名访问6.2 批量操作# 批量插入 data [(李四, lisiexample.com), (王五, wangwuexample.com)] cursor.executemany(INSERT INTO users (name, email) VALUES (%s, %s), data) db.commit()6.3 连接池管理对于高并发应用建议使用连接池from DBUtils.PooledDB import PooledDB pool PooledDB( creatorMySQLdb, maxconnections10, hostlocalhost, userusername, passwdpassword, dbdatabase_name, charsetutf8mb4 ) # 获取连接 db pool.connection() cursor db.cursor() # 使用后不需要关闭连接会自动返回到连接池7. 常见问题与解决方案7.1 连接问题排查Cant connect to MySQL server检查MySQL服务是否运行确认主机、端口是否正确检查防火墙设置Access denied for user确认用户名密码正确检查用户是否有远程连接权限MySQL 8.0可能需要使用新的认证插件7.2 编码问题# 确保连接时指定了正确的字符集 db MySQLdb.connect(..., charsetutf8mb4) # 处理查询结果时解码 name row[1].decode(utf-8) if isinstance(row[1], bytes) else row[1]7.3 性能优化建议使用参数化查询而非字符串拼接防止SQL注入批量操作时使用executemany合理使用事务减少提交次数查询时只获取需要的列建立适当的索引8. 现代替代方案虽然MySQLdb仍然可用但以下现代替代方案可能更适合新项目PyMySQL- 纯Python实现兼容MySQLdb APIpip install pymysqlmysql-connector-python- MySQL官方驱动pip install mysql-connector-pythonSQLAlchemy- ORM工具提供更高层次的抽象pip install sqlalchemy在实际项目中我通常会根据项目规模和复杂度选择不同的方案。对于小型项目或脚本直接使用MySQLdb或PyMySQL足够对于大型应用SQLAlchemy提供的ORM功能可以显著提高开发效率。