mysql-python 这个库的官方名称是 MySQLdb,它是 Python 连接 MySQL 数据库最古老、最经典的库之一。

有一个非常关键的问题:MySQLdb 官方版本并不支持 Python 3,它最初是为 Python 2 开发的,虽然社区有一些第三方分支(如 mysqlclient)支持 Python 3,但它们安装起来可能会比较麻烦,尤其是在 macOS 和 Windows 系统上,因为它们需要编译 MySQL 的 C 语言扩展,依赖系统环境。
在现代 Python 3 开发中,我们强烈推荐使用以下两个库中的一个,它们是 mysql-python 的现代替代品,并且对 Python 3 有非常好的支持:
mysql-connector-python(官方推荐)PyMySQL(纯 Python 实现,安装简单)
下面我将分别介绍这三个库(mysql-python/MySQLdb、mysql-connector-python、PyMySQL),并提供完整的代码示例。
mysql-python (即 MySQLdb)
这是最传统的库,但不推荐在新项目中使用,特别是如果你使用 Python 3 的话。

为什么不推荐?
- Python 3 兼容性差:官方版不支持,社区版(如
mysqlclient)安装复杂。 - 依赖问题:编译时需要 MySQL 的开发库(如
libmysqlclient-devon Linux,mysql-develon CentOS, 以及 Xcode Command Line Tools on macOS),新手很容易在安装时遇到各种错误。
如何尝试安装(仅限 Linux 或使用 Homebrew 的 macOS)
# 尝试安装社区版 mysqlclient pip install mysqlclient
如果失败,通常需要先安装系统依赖,例如在 Ubuntu/Debian 上:
sudo apt-get update sudo apt-get install python3-dev libmysqlclient-dev
在 CentOS/RHEL 上:
sudo yum install python3-devel mysql-devel
在 macOS 上(需要先安装 Xcode Command Line Tools 和 MySQL):
brew install mysql pip install mysqlclient
代码示例(假设你成功安装了 mysqlclient)
import MySQLdb
# --- 数据库连接信息 ---
DB_HOST = 'localhost'
DB_USER = 'your_username'
DB_PASS = 'your_password'
DB_NAME = 'your_database'
try:
# 1. 建立连接
# connect() 返回一个连接对象
conn = MySQLdb.connect(host=DB_HOST, user=DB_USER, passwd=DB_PASS, db=DB_NAME)
# 2. 创建一个游标对象
# 游标用于执行 SQL 语句并获取结果
cursor = conn.cursor()
# 3. 执行 SQL 查询
# 使用 %s 作为占位符,防止 SQL 注入
sql_query = "SELECT id, name, email FROM users WHERE id = %s"
cursor.execute(sql_query, (1,)) # 注意:元组形式 (1,)
# 4. 获取查询结果
# fetchone() 获取单行结果
user = cursor.fetchone()
if user:
print(f"ID: {user[0]}, Name: {user[1]}, Email: {user[2]}")
# 5. 执行插入操作
insert_sql = "INSERT INTO users (name, email) VALUES (%s, %s)"
new_user_data = ("Alice", "alice@example.com")
cursor.execute(insert_sql, new_user_data)
# 6. 提交事务
# 对于写操作(INSERT, UPDATE, DELETE),必须提交才能生效
conn.commit()
print("新用户插入成功!")
# 7. 关闭游标和连接
cursor.close()
conn.close()
except MySQLdb.Error as e:
# 如果发生错误,回滚事务
if 'conn' in locals():
conn.rollback()
print(f"数据库错误: {e}")
mysql-connector-python (官方推荐)
这是 Oracle 官方维护的 Python 驱动,它功能全面,支持 Python 3,并且是官方支持的“正统”选择。

安装
pip install mysql-connector-python
代码示例
API 风格与 MySQLdb 非常相似,但对象和方法名略有不同。
import mysql.connector
from mysql.connector import Error
# --- 数据库连接信息 ---
DB_CONFIG = {
'host': 'localhost',
'user': 'your_username',
'password': 'your_password',
'database': 'your_database'
}
try:
# 1. 建立连接
# connect() 返回一个连接对象
conn = mysql.connector.connect(**DB_CONFIG)
if conn.is_connected():
print("成功连接到数据库")
# 2. 创建一个游标对象
cursor = conn.cursor()
# 3. 执行 SQL 查询
sql_query = "SELECT id, name, email FROM users WHERE id = %s"
cursor.execute(sql_query, (1,))
# 4. 获取查询结果
# fetchone() 获取单行结果
user = cursor.fetchone()
if user:
print(f"ID: {user[0]}, Name: {user[1]}, Email: {user[2]}")
# 5. 执行插入操作
insert_sql = "INSERT INTO users (name, email) VALUES (%s, %s)"
new_user_data = ("Bob", "bob@example.com")
cursor.execute(insert_sql, new_user_data)
# 6. 提交事务
conn.commit()
print(f"成功插入 {cursor.rowcount} 行数据")
# 7. 关闭游标和连接
cursor.close()
conn.close()
except Error as e:
print(f"数据库错误: {e}")
finally:
# 确保连接被关闭
if 'conn' in locals() and conn.is_connected():
conn.close()
print("数据库连接已关闭")
PyMySQL (纯 Python 实现)
PyMySQL 是一个纯 Python 实现的 MySQL 客户端,这意味着它不需要编译 C 语言扩展,安装极其简单,跨平台兼容性非常好。
安装
pip install PyMySQL
代码示例
PyMySQL 的 API 风格与 Python 内置的 sqlite3 模块非常相似,非常直观。
import pymysql
from pymysql import MySQLError
# --- 数据库连接信息 ---
DB_CONFIG = {
'host': 'localhost',
'user': 'your_username',
'password': 'your_password',
'database': 'your_database',
'charset': 'utf8mb4', # 推荐使用 utf8mb4
'cursorclass': pymysql.cursors.DictCursor # 让游标返回字典,更方便
}
try:
# 1. 建立连接
# connect() 返回一个连接对象
conn = pymysql.connect(**DB_CONFIG)
with conn.cursor() as cursor:
# 2. 执行 SQL 查询
sql_query = "SELECT id, name, email FROM users WHERE id = %s"
cursor.execute(sql_query, (1,))
# 3. 获取查询结果
# fetchone() 获取单行结果,由于使用了 DictCursor,结果是字典
user = cursor.fetchone()
if user:
print(f"ID: {user['id']}, Name: {user['name']}, Email: {user['email']}")
# 4. 执行插入操作
insert_sql = "INSERT INTO users (name, email) VALUES (%s, %s)"
new_user_data = ("Charlie", "charlie@example.com")
cursor.execute(insert_sql, new_user_data)
# 5. 提交事务
conn.commit()
print(f"成功插入 {cursor.rowcount} 行数据")
except MySQLError as e:
print(f"数据库错误: {e}")
# 如果发生错误,回滚事务
if 'conn' in locals():
conn.rollback()
finally:
# 6. 关闭连接
if 'conn' in locals():
conn.close()
print("数据库连接已关闭")
注意:PyMySQL 的 with conn.cursor() 语句是一个非常 Pythonic 的写法,它能确保游标在代码块执行完毕后自动关闭,即使发生异常也是如此。
总结与对比
| 特性 | mysql-python (MySQLdb) |
mysql-connector-python (官方) |
PyMySQL |
|---|---|---|---|
| 维护方 | 社区 (非官方) | Oracle (官方) | 社区 |
| Python 3 支持 | 差 (需用 mysqlclient 分支) |
好 | **好 |
