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_engine <p>engine = 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 拼错、字符集漏设、权限没开这四类问题,逐个对着检查比重写代码更快。
