SQLAlchemy 能连接 MySQL,且是官方支持的主流数据库之一;需安装 mysqlclient 或 PyMySQL 驱动并正确配置 URL,推荐生产用 mysqlclient、开发用 PyMySQL,注意字符集设为 utf8mb4 并检查权限与服务状态。

SQLAlchemy 能否连接 MySQL
能,而且是官方支持的主流数据库之一。只要安装对应驱动并配置正确 URL,SQLAlchemy 就能稳定连接 MySQL。关键不在“能不能”,而在“用哪个驱动”和“URL 格式对不对”。
必须安装 mysqlclient 还是 PyMySQL
两者都行,但行为有差异:
-
mysqlclient是 C 扩展,性能更好、兼容性更稳,推荐生产环境使用;需系统级依赖(如libmysqlclient-dev),Windows 用户常卡在编译上 -
PyMySQL纯 Python 实现,pip install pymysql即装即用,适合开发/测试,但某些高级特性(如 LOAD DATA LOCAL INFILE)默认禁用 - URL 中驱动名要匹配:
mysql://对应mysqldb(即mysqlclient),mysql+pymysql://才走PyMySQL
创建 engine 的最小可用示例
以下是最简可运行代码,注意端口、数据库名、用户名密码需按实际替换:
from sqlalchemy import create_engineengine = create_engine( "mysql+pymysql://root:password@127.0.0.1:3306/testdb?charset=utf8mb4", echo=False, # 设为 True 可看 SQL 日志 pool_pre_ping=True, # 自动检测连接有效性,防超时断连 )
常见错误:
立即学习“Python免费学习笔记(深入)”;
-
ModuleNotFoundError: No module named 'pymysql'→ 忘装驱动 -
Access denied for user→ 密码错或用户没远程权限(MySQL 8 默认只允许 localhost) -
Can't connect to MySQL server→ MySQL 服务没启动,或防火墙/云服务器安全组未放行 3306
charset 和 collation 容易被忽略的点
不显式指定字符集,中文可能存成 ??? 或报 Incorrect string value 错误:
- URL 中加
?charset=utf8mb4(不是utf8,MySQL 的utf8实际是 utf8mb3) - 建表时也得声明:例如
Column(String(255), nullable=False, comment='姓名')不够,还得确保该字段在 DB 层是utf8mb4_unicode_ci排序规则 - 如果用
create_all()自动建表,建议额外执行:engine.execute("ALTER DATABASE testdb CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci")
MySQL 连接本身不难,真正卡住人的往往是驱动选错、URL 拼错、字符集漏设、权限没开这四类问题,逐个对着检查比重写代码更快。










