You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PyMySQL连接MySQL遇1045权限错误及授权语法问题求助

解决PyMySQL连接MySQL的权限错误及GRANT语法问题

咱们一步步来解决你遇到的两个问题:PyMySQL的连接权限报错,还有GRANT语句的语法问题。

一、GRANT语句的语法错误原因及修复

你执行grant all privileges on [db_name] to root@localhost identified by "Password";时触发语法错误,核心原因是MySQL 8.0及以上版本已经移除了GRANT语句中附带IDENTIFIED BY的语法——不能再用一条语句同时完成授权和设置密码,必须拆分成两步操作:

  1. 先调整root用户的认证方式(确保是PyMySQL支持的密码认证)并设置密码:

    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的实际密码';
    

    注:新版MySQL默认用caching_sha2_password插件,PyMySQL虽支持但配置稍复杂,改成mysql_native_password更稳妥。

  2. 再执行授权语句(注意去掉方括号,替换成你真实的数据库名):

    GRANT ALL PRIVILEGES ON db_name.* TO 'root'@'localhost';
    
  3. 最后刷新权限让设置立即生效:

    FLUSH PRIVILEGES;
    

二、PyMySQL的Access denied for user 'root'@'localhost' (using password: NO)错误解决

这个报错的关键信息是using password: NO——意思是PyMySQL连接时根本没传递密码,但你明明写了password="pass",可能的原因及修复方法:

  • 检查密码参数拼写:确认你写的是password而不是passwd(PyMySQL的参数名是password,别拼写错误);如果密码包含特殊字符(比如双引号、反斜杠),试试用单引号包裹密码,比如password='pass_with_special"'。
  • 确认root用户的认证方式:如果刚才没调整认证方式,root@localhost可能用的是auth_socket插件(MySQL 8.0默认),这种方式通过操作系统用户认证,完全忽略密码输入,自然会出现using password: NO的错误,一定要执行上面的ALTER USER语句改成密码认证。
  • 尝试指定Unix Socket路径:如果你的MySQL通过本地socket连接而非TCP/IP,可能需要手动指定socket路径,比如:
    pymysql.connect(
        host='localhost',
        user='root',
        password="你的密码",
        db='db_name',
        charset='utf8',
        port=3306,
        unix_socket='/var/run/mysqld/mysqld.sock'  # Mac系统可能是/tmp/mysql.sock,根据你的环境调整
    )
    
  • 验证数据库名一致性:确保授权时用的数据库名和PyMySQL连接参数里的db='db_name'完全一致,不要带方括号或其他多余符号。

按上面的步骤操作,应该就能解决问题了。

内容的提问来源于stack exchange,提问作者dnjs7292

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:21:53