Python数据库连接失败通常源于环境、配置或权限问题,需依次排查:数据库服务状态、连接参数匹配性、驱动安装与兼容性、防火墙及用户权限设置。

Python连接数据库失败,通常不是代码写错了,而是环境、配置或权限层面出了问题。先别急着改代码,按顺序排查这几个关键点。
检查数据库服务是否真的在运行
很多连接失败,其实是数据库根本没启动。比如用的是 MySQL,得确认 mysqld 进程在跑;PostgreSQL 要看 postgresql.service 是否 active;SQLite 是文件路径问题,不涉及服务,但文件得存在且有读写权限。
- Linux/macOS:运行 systemctl status mysql 或 pg_ctl status
- Windows:打开“服务”管理器,找 MySQL80 或 PostgreSQL xx
- 本地 SQLite:确认 .db 文件路径正确,且 Python 进程有权限访问该目录
核对连接参数是否匹配实际配置
host、port、user、password、database 这五个参数,任何一个和数据库实际设置不一致都会报错。特别注意:
- host 别写成 localhost 就以为一定通——有些 MySQL 默认只监听 127.0.0.1,而 localhost 可能走 socket;试试换为 127.0.0.1
- port 别默认 3306 或 5432,查下数据库实际监听端口(MySQL 用 SHOW VARIABLES LIKE 'port';)
- database 名字要完全一致,区分大小写(尤其在 Linux 上)
- 密码里有特殊字符(如 @ / :)?URL 方式连接时得用 urllib.parse.quote_plus() 编码
验证 Python 驱动是否安装且版本兼容
不同数据库需要对应驱动,装错或版本太老常导致连接被拒绝或直接抛异常。
立即学习“Python免费学习笔记(深入)”;
- MySQL:推荐 pymysql(纯 Python,易调试)或 mysql-connector-python(官方);mysqldb 已基本淘汰
- PostgreSQL:用 psycopg2(C 扩展,性能好),安装时若报编译错误,可换 psycopg2-binary
- SQL Server:用 pyodbc,需额外装 ODBC 驱动(如 Microsoft ODBC Driver for SQL Server)
- 运行 pip list | grep -i sql 确认已安装,再查文档看是否支持你用的数据库版本
留意防火墙与用户权限设置
即使服务开着、参数对了,也可能被拦在外面。
- 远程连接 MySQL?确认用户允许从对应 host 登录:SELECT host, user FROM mysql.user;,必要时执行 GRANT ALL ON *.* TO 'user'@'%' IDENTIFIED BY 'pwd'; FLUSH PRIVILEGES;
- 云数据库(如阿里云 RDS、腾讯云 CDB)?检查安全组规则是否放行对应端口
- 本地防火墙(Windows Defender、ufw、iptables)是否阻止了数据库端口?临时关闭测试一下
- 某些环境(如 Docker)网络隔离,host 不能写 localhost,得用宿主机 IP 或 docker network alias
不复杂但容易忽略。把服务状态、参数、驱动、权限这四块理清楚,90% 的连接问题都能快速定位。











