Python问题:OperationalError: (pymysql.err.OperationalError) (2003, “Can‘t connect to MySQL server on ‘

在使用Python的pymysql模块连接Win10系统上的MySQL数据库时遇到OperationalError,原因是密码包含特殊字符导致解析问题。通过使用urllib.parse.quote_plus()函数转义密码,成功建立数据库连接。此方法适用于处理含有复杂字符的数据库密码。
部署运行你感兴趣的模型镜像

win10系统 3.7.0python版本

在 jupyter notebook中

出现以下错误

OperationalError: (pymysql.err.OperationalError) (2003, "Can't connect to MySQL server on '#@5*.***.**.***' ([Errno 11003] getaddrinfo failed)")

解决方法:

简单理解为是无法连接到自己想要的数据库。

查看连接语句:

密码:Z !@#

服务器:5*******

端口:5****

数据库:b****

分析原因:在创建连接时,无法区分密码是Z !@# 还是Z !,有两个@,不知道密码到哪里截至

所以改写连接语句:

from urllib import parse
password = 'Z!@#'
pwd = parse.quote_plus(password)
engine = create_engine(f'mysql+pymysql://root1:{pwd}@5*.***.**.***:5*****/b*****')

就成功了 ✌

您可能感兴趣的与本文相关的镜像

Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

### 解决 sqlalchemy pymysql OperationalError 2003 Can't connect to MySQL server on '192.168.0.55' timed out 当使用 SQLAlchemy 连接 MySQL 服务器时,出现 `OperationalError: (pymysql.err.OperationalError) (2003, "Can't connect to MySQL server on '192.168.0.55' (timed out)")` 错误时,通常是由于网络连接问题、数据库配置不当或连接池设置不合理等原因导致的。以下是解决该问题的几种方法: #### 1. 检查网络连接 确保客户端能够通过网络访问 MySQL 服务器。可以通过 `ping` 或 `telnet` 命令测试网络连通性: ```bash ping 192.168.0.55 telnet 192.168.0.55 3306 ``` 如果无法通过 `telnet` 连接,可能是防火墙或 MySQL 服务器的端口未开放。需要检查服务器的防火墙设置,确保 3306 端口是开放的,并且 MySQL 服务器允许来自客户端的连接。这可以通过修改 MySQL 的配置文件 `my.cnf` 或 `my.ini` 中的 `bind-address` 设置来实现: ```ini [mysqld] bind-address = 0.0.0.0 ``` 此外,还需要确保 MySQL 用户权限允许从远程主机连接。例如,创建一个允许从任意主机连接的用户: ```sql CREATE USER 'remote_user'@'%' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON *.* TO 'remote_user'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES; ``` #### 2. 检查 MySQL 服务状态 确认 MySQL 服务正在运行。可以通过以下命令检查 MySQL 服务的状态: ```bash systemctl status mysql ``` 如果服务未运行,启动 MySQL 服务: ```bash systemctl start mysql ``` #### 3. 调整连接池配置 如果使用的是 Flask-SQLAlchemy,可以通过调整连接池的配置来避免因连接超时导致的问题。`SQLALCHEMY_POOL_RECYCLE` 参数用于设置连接池中连接的回收时间,建议将其设置为小于 MySQL 的 `wait_timeout` 值,以避免连接超时: ```python app.config["SQLALCHEMY_POOL_RECYCLE"] = 800 ``` 此外,还可以设置连接池的大小,以确保在高并发情况下有足够的连接可用: ```python app.config["SQLALCHEMY_POOL_SIZE"] = 10 ``` #### 4. 修改 MySQL 的超时设置 如果 MySQL 的 `wait_timeout` 设置过短,可能会导致连接在空闲一段时间后被断开。可以通过修改 MySQL 的配置文件来延长 `wait_timeout` 的值: ```ini [mysqld] wait_timeout = 28800 interactive_timeout = 28800 ``` 修改完配置文件后,重启 MySQL 服务以使更改生效: ```bash systemctl restart mysql ``` #### 5. 使用正确的连接字符串 确保连接字符串中的参数正确无误。以下是一个示例连接字符串: ```python SQLALCHEMY_DATABASE_URI = "mysql+pymysql://root:Password123$@192.168.0.55:3306/your_database?charset=utf8" ``` 请确保用户名、密码、主机地址和数据库名称均正确无误。 #### 6. 检查 DNS 解析 如果 MySQL 服务器的 IP 地址是通过域名解析得到的,可能需要检查 DNS 解析是否正常工作。可以通过 `nslookup` 或 `dig` 命令来验证域名解析是否正确。 #### 7. 检查 SSL 配置 如果 MySQL 服务器启用了 SSL 加密连接,而客户端未正确配置 SSL 证书,也可能导致连接失败。可以通过在连接字符串中添加 `ssl={"ssl_mode": "DISABLED"}` 参数来禁用 SSL: ```python SQLALCHEMY_DATABASE_URI = "mysql+pymysql://root:Password123$@192.168.0.55:3306/your_database?charset=utf8&ssl={"ssl_mode": "DISABLED"}" ``` ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值