Python3.6使用PyMySQL0.8.0连接MySQL时密码被忽略,报1045错误求助
这个错误提示其实很明确——MySQL服务器收到你的连接请求时,发现你没有提供密码,所以直接拒绝了访问。至于为什么PyMySQL没把你写的密码传过去,大概率是参数传递的问题,下面给你分析几种常见原因和解决办法:
优先用关键字参数,避免位置顺序搞错
虽然PyMySQL 0.8.0的connect函数位置参数顺序是host, user, password, database,但手动写位置参数很容易记混顺序(比如不小心把密码和数据库名搞反)。改用关键字参数可以彻底避免这个问题,代码更清晰也不容易错:import pymysql db = pymysql.connect( host="localhost", user="user", password="password", database="database" )这样每个参数的作用都一目了然,不会出现参数位置偏移导致密码没被正确传递的情况。
检查密码是否被意外设为None/空字符串
如果你是从变量或者配置文件里读取密码,要确认这个值不是None或者空字符串""。当PyMySQL收到None作为密码参数时,连接时就不会向MySQL发送密码,自然会触发这个错误。验证MySQL用户的登录权限
先在命令行测试一下这个用户能不能正常登录:打开终端输入mysql -u user -p,然后输入你的密码。如果命令行都登不上,那可能是用户不存在、密码错误或者没有本地登录权限,这时候得先去MySQL里调整用户权限或者确认密码。如果命令行能登录,那肯定是代码里参数传递的问题,回到第一条用关键字参数试试。密码包含特殊字符时的注意事项
如果你的密码里有@、#、$这类特殊字符,用位置参数可能会出现解析异常(虽然Python字符串本身支持,但保险起见还是用关键字参数更稳妥),避免因为字符转义问题导致密码没有被正确传递。
内容的提问来源于stack exchange,提问作者Tom

