在 Python 里连接 MySQL 数据库时,需要依赖第三方驱动。不同驱动在兼容性、性能、安装难度上各有差异,本文介绍几种常见选择及适用场景。


1. MySQLdb(Python 2 时代常用)

MySQLdb 是早期在 Python 2 下最常用的 MySQL 驱动,基于 C 扩展,性能好,API 和 DB-API 2.0 一致。

  • 适用:仅限 Python 2
  • 安装pip install MySQL-python(Python 2 环境)
  • 现状:官方已不再维护,Python 3 下请改用下文中的替代品
# Python 2 示例
import MySQLdb
conn = MySQLdb.connect(host='localhost', user='root', passwd='', db='test')
cursor = conn.cursor()
cursor.execute("SELECT 1")

2. mysqlclient(推荐,Python 3 下的「正统」替代)

mysqlclient 是 MySQLdb 的 Python 3 分支,继续使用 C 扩展,兼容 DB-API 2.0,接口和 MySQLdb 几乎一致,所以从 MySQLdb 迁移成本很低。

  • 适用:Python 3
  • 安装pip install mysqlclient
  • 特点:性能好、和 MySQLdb API 兼容、需要本机有 MySQL 开发库(如 Windows 上可能需额外安装)
import MySQLdb  # 包名仍是 MySQLdb,由 mysqlclient 提供

conn = MySQLdb.connect(
    host='localhost',
    user='root',
    password='your_password',
    database='mydb',
    charset='utf8mb4'
)
cursor = conn.cursor()
cursor.execute("SELECT id, name FROM users WHERE id = %s", (1,))
rows = cursor.fetchall()
conn.close()

3. PyMySQL(纯 Python,易安装)

PyMySQL 是纯 Python 实现,不依赖 C 扩展和 MySQL 客户端库,因此 pip install PyMySQL 即可,在 Windows 或没有 MySQL 开发环境的机器上特别方便。

  • 适用:Python 3(也有 Python 2 版本,但已过时)
  • 安装pip install PyMySQL
  • 特点:纯 Python、安装简单、性能略逊于 mysqlclient,但对多数应用足够
import pymysql

conn = pymysql.connect(
    host='localhost',
    user='root',
    password='your_password',
    database='mydb',
    charset='utf8mb4'
)
with conn.cursor() as cursor:
    cursor.execute("SELECT id, name FROM users")
    for row in cursor:
        print(row)
conn.close()

若想在不改代码的前提下用 PyMySQL 替代 mysqlclient,可以在程序入口处执行:

import pymysql
pymysql.install_as_MySQLdb()
# 之后 import MySQLdb 实际使用的就是 PyMySQL

4. mysql-connector-python(官方驱动)

mysql-connector-python 是 Oracle 提供的官方 MySQL 连接器,纯 Python,无需本机 MySQL 库。

  • 适用:Python 3
  • 安装pip install mysql-connector-python
  • 特点:官方维护、纯 Python、API 与上述两种略有不同
import mysql.connector

conn = mysql.connector.connect(
    host='localhost',
    user='root',
    password='your_password',
    database='mydb'
)
cursor = conn.cursor(dictionary=True)  # 返回字典形式的行
cursor.execute("SELECT * FROM users LIMIT 5")
for row in cursor:
    print(row)
conn.close()

5. aiomysql(异步驱动)

在 asyncio 项目里需要异步访问 MySQL 时,可以使用 aiomysql,它基于 PyMySQL,提供异步接口。

  • 适用:Python 3 + asyncio(如 aiohttp、FastAPI 等)
  • 安装pip install aiomysql
import asyncio
import aiomysql

async def main():
    conn = await aiomysql.connect(
        host='localhost', user='root', password='', db='mydb'
    )
    async with conn.cursor() as cursor:
        await cursor.execute("SELECT 1")
        result = await cursor.fetchone()
    conn.close()

asyncio.run(main())

6. 与 ORM(如 SQLAlchemy)配合使用

使用 SQLAlchemy 等 ORM 时,连接 MySQL 仍需指定底层驱动,常用写法如下:

驱动 SQLAlchemy 连接串中的 dialect/driver 示例
mysqlclient mysql+mysqldb://user:pass@host/dbname
PyMySQL mysql+pymysql://user:pass@host/dbname
mysql-connector mysql+mysqlconnector://user:pass@host/dbname
from sqlalchemy import create_engine

# 使用 PyMySQL 作为驱动
engine = create_engine('mysql+pymysql://user:password@localhost/mydb?charset=utf8mb4')

简要对比与选择建议

驱动 Python 版本 实现方式 安装难度 性能 典型场景
MySQLdb 2 C 扩展 仅旧项目
mysqlclient 3 C 扩展 中(需依赖) 新项目、追求性能
PyMySQL 3 纯 Python 快速上手、无 C 依赖
mysql-connector-python 3 纯 Python 偏好官方驱动
aiomysql 3 纯 Python 异步/高并发
  • 一般 Web 或脚本:优先考虑 mysqlclient(能装上的话)或 PyMySQL
  • Windows 或不想装 MySQL 开发库:用 PyMySQLmysql-connector-python
  • 异步框架:用 aiomysql
  • 从旧项目 MySQLdb 迁移到 Python 3:用 mysqlclient 可几乎不改代码。

以上是 Python 中常用 MySQL 驱动包的简要介绍,可按项目环境和需求选用其一即可。