python连接数据库失败主因是pip安装环境与vscode解释器不一致,需通过“python: select interpreter”确认路径一致,并用python -m pip install确保安装到正确环境;推荐pymysql用于轻量脚本和orm兼容,mysql-connector-python适用于企业级特性但需手动commit;敏感配置应存于.env文件并加入.gitignore;务必用with管理连接并显式关闭游标,避免连接泄漏。

Python连接数据库前,必须确认当前Python环境
VSCode里跑Python脚本连不上数据库,80%是因为pip install装错了环境——你装在系统Python或某个虚拟环境里,但VSCode默认用的是另一个解释器。
检查方法:打开命令面板(Ctrl+Shift+P),输入Python: Select Interpreter,看右下角显示的路径是否和你执行pip install pymysql或pip install mysql-connector-python时所在的终端一致。
- 如果路径不一致,要么切换解释器,要么在VSCode内置终端里重新运行
pip install - Windows用户特别注意:
python -m pip install比直接pip install更可靠,能确保装到当前解释器对应的位置 - 用
pip list | grep -i sql(Linux/macOS)或pip list | findstr sql(Windows)确认驱动已安装
选pymysql还是mysql-connector-python?
两者都能连MySQL,但行为差异明显,容易踩坑:
-
pymysql是纯Python实现,跨平台稳定,支持autocommit=True默认关闭事务,适合快速验证和轻量脚本 -
mysql-connector-python是Oracle官方驱动,对SSL、压缩协议、连接池等企业级特性支持更好,但默认开启autocommit=False,INSERT/UPDATE/DELETE后必须显式调用conn.commit(),否则数据不落库 - 如果你用SQLAlchemy或Django,推荐
pymysql,因为它的URL scheme(mysql+pymysql://...)兼容性更好
示例对比:
import pymysql<br>conn = pymysql.connect(host='localhost', user='root', password='123', database='test', autocommit=True)
import mysql.connector<br>conn = mysql.connector.connect(host='localhost', user='root', password='123', database='test')<br># 必须手动 commit()<br>cursor.execute("INSERT INTO users(name) VALUES ('Alice')")<br>conn.commit()
连接字符串硬编码?别这么做
把host、password写死在代码里,本地测试还行,一上Git或部署就出事。正确做法是分离配置:
- 用
.env文件存敏感信息,配合python-dotenv加载:pip install python-dotenv - 在项目根目录建
.env:DB_HOST=localhost、DB_USER=root、DB_PASSWORD=123 - 代码中读取:
from dotenv import load_dotenv; load_dotenv(); os.getenv('DB_HOST') - 务必把
.env加入.gitignore,否则密码直接进仓库
连接泄漏是静默杀手
没关游标、没关连接,短时间看不出问题,压测或长时间运行时会触发Too many connections错误。
- 永远用
with语句管理连接(pymysql支持):with pymysql.connect(...) as conn: - 即使用了
with,也要显式关闭游标:cursor.close(),尤其在循环中反复查询时 - 避免在函数里返回
conn或cursor对象——资源归属不清,极易漏关 - 连接池(如
DBUtils.PooledDB)适合高并发场景,但小项目反而增加复杂度,先保证单次连接正确关闭再说
真正麻烦的不是连不上,而是连上了却不释放——它不会报错,只会在某天凌晨三点让你收到告警。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











