import pymysql
# 建立数据库连接
db = pymysql.connect(
host="localhost",
user="root",
password="password",
database="easy_test"
)
# 创建游标对象
cursor = db.cursor()
# 执行SQL查询
sql = "SELECT * FROM user"
cursor.execute(sql)
# 获取查询结果
result = cursor.fetchall()
# 处理查询结果
for row in result:
print(row)
# 关闭数据库连接
db.close()
使用以上代码连接数据库,在windows和wsl中使用相同的代码,window中正常运行,但wsl中报错pymysql.err.OperationalError: (1698, "Access denied for user 'root'@'localhost'"),问了ChatGPT也没解决。
最后查询到执行以下结果,查询WSL的DNS解析IP
cat /etc/resolv.conf
将代码的localhost改成以上代码执行结果查询到的ip就好。
最后附上查询到的原因。
-
网络接口和地址解析问题:
- 由于 WSL 的网络配置,
localhost
可能在某些情况下无法正确解析或访问。 - 使用
/etc/resolv.conf
中的 IP 地址,可以绕过这些解析问题,直接访问 MySQL 服务。
- 由于 WSL 的网络配置,
-
DNS 服务器的角色:
/etc/resolv.conf
中的nameserver
地址通常是本地网络的 DNS 服务器地址,确保了网络请求能够正确解析和路由。- 使用这个地址作为 MySQL 连接的主机地址,确保了连接请求可以正确路由到 MySQL 服务所在的机器。