mysql SQLAlchemy能否连接mysql_Python操作mysql说明

来源:这里教程网 时间:2026-02-28 20:37:17 作者:

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

相关推荐