核心要点:MySQLdb 的兼容性问题
你需要了解一个关键问题:MySQLdb 是一个纯 Python 包,但它的底层依赖一个名为 mysqlclient 的 C 语言库,这个 C 库需要从源代码编译,因此安装过程可能会遇到各种编译错误,尤其是在 Windows 系统上。

当你尝试 pip install MySQLdb 时,系统实际上是在尝试下载 mysqlclient 的源码并编译它,如果失败,你就会看到类似 error: Microsoft Visual C++ 14.0 is required 的错误。
安装 MySQLdb (不推荐,仅用于旧项目)
如果你正在维护一个古老的、明确要求 MySQLdb 的项目,可以尝试以下步骤。
准备工作:安装 MySQL 开发库
这是最关键的一步,你需要安装 MySQL 的 C 开发头文件和库,pip 才能成功编译 mysqlclient。
-
在 macOS 上 (使用 Homebrew):
(图片来源网络,侵删)brew install mysql
-
在 Linux (Debian/Ubuntu) 上:
sudo apt-get update sudo apt-get install libmysqlclient-dev
-
在 Windows 上: 这是最麻烦的,你需要安装 MySQL 的社区服务器,并在安装时选择 "C++ Connector" 选项,或者单独下载并配置
mysqlclient的预编译二进制文件,对于 Windows 用户,强烈建议直接跳到下面的“推荐方案”。
使用 pip 安装
在成功安装了上述开发库后,运行:
pip install MySQLdb
如果一切顺利,它会成功安装,但更常见的是,它会尝试安装 mysqlclient,因为你现在安装的 MySQLdb 实际上是 mysqlclient 的一个别名。

# 在大多数现代环境中,这个命令等同于安装 mysqlclient pip install MySQLdb
如果仍然失败,请直接尝试安装 mysqlclient:
pip install mysqlclient
推荐方案 (现代 Python 项目)
对于所有新项目,我强烈推荐使用以下两个库中的一个,它们更稳定、安装更简单,并且拥有更好的社区支持。
方案 A:mysql-connector-python (官方驱动)
这是 Oracle 官方提供的纯 Python 驱动,不需要编译,安装非常简单。
安装
pip install mysql-connector-python
使用示例
import mysql.connector
from mysql.connector import Error
try:
# 建立连接
connection = mysql.connector.connect(
host='localhost', # 数据库主机
database='your_database', # 数据库名
user='your_username', # 用户名
password='your_password' # 密码
)
if connection.is_connected():
db_info = connection.get_server_info()
print(f"成功连接到 MySQL 服务器,版本: {db_info}")
cursor = connection.cursor()
cursor.execute("SELECT database();")
record = cursor.fetchone()
print(f"你正在使用数据库: {record[0]}")
# 执行一个查询
cursor.execute("SELECT * FROM your_table LIMIT 5;")
rows = cursor.fetchall()
print("\n查询结果:")
for row in rows:
print(row)
except Error as e:
print(f"连接或查询时发生错误: {e}")
finally:
# 关闭连接
if 'connection' in locals() and connection.is_connected():
cursor.close()
connection.close()
print("\nMySQL 连接已关闭。")
方案 B:PyMySQL (纯 Python,流行且易用)
PyMySQL 是另一个非常流行的纯 Python 驱动,安装和 mysql-connector-python 一样简单,性能也很好。
安装
pip install PyMySQL
使用示例
import pymysql
from pymysql import MySQLError
try:
# 建立连接
connection = pymysql.connect(
host='localhost',
user='your_username',
password='your_password',
database='your_database',
cursorclass=pymysql.cursors.DictCursor # 可选:让查询结果以字典形式返回
)
with connection.cursor() as cursor:
# 执行一个查询
sql = "SELECT * FROM your_table LIMIT 5;"
cursor.execute(sql)
results = cursor.fetchall()
print("\n查询结果:")
for row in results:
print(row)
# 执行一个插入操作
# insert_sql = "INSERT INTO your_table (column1, column2) VALUES (%s, %s)"
# cursor.execute(insert_sql, ('value1', 'value2'))
# connection.commit() # 插入、更新、删除操作需要提交
except MySQLError as e:
print(f"数据库操作发生错误: {e}")
finally:
if 'connection' in locals() and connection.open:
connection.close()
print("\nMySQL 连接已关闭。")
总结与对比
| 特性 | MySQLdb / mysqlclient |
mysql-connector-python (官方) |
PyMySQL |
|---|---|---|---|
| 类型 | C 扩展 + Python | 纯 Python | 纯 Python |
| 安装难度 | 高 (需要编译) | 低 (直接 pip) |
低 (直接 pip) |
| 性能 | 最高 | 良好 | 良好 |
| 稳定性 | 良好,但旧 | 高 (官方维护) | 高 (社区活跃) |
| 推荐度 | ⭐☆☆☆☆ (仅用于旧项目) | ⭐⭐⭐⭐☆ | ⭐⭐⭐⭐☆ |
| 最大优点 | 性能极致 | 官方支持,功能全面 | 轻量级,安装简单 |
最终建议
- 如果你是新手或正在开始一个新项目:请直接选择
mysql-connector-python或PyMySQL,它们能让你避开绝大多数的安装陷阱,让你专注于业务逻辑本身。 - 如果你在维护一个旧项目:尝试按照 方法一 安装
mysqlclient,如果遇到无法解决的编译问题,可以考虑修改项目的依赖,将其升级到mysql-connector-python或PyMySQL(这通常需要少量代码调整,但非常可行)。
