[PyMySQL&MySQL8.0]OperationalError: (1045, 'Access denied for user 'root'xxxx

  • 具体报错:OperationalError: (1045, "Access denied for user 'root'@'localhost' (using password: NO)")
  • 连接数据库的代码如下:

    1
    2
    3
    4
    5
    6
    7
    8
    import pymysql
    config = {
    'host': 'localhost',
    'user': 'root',
    'password': 'passwd',
    'db': 'metagene',
    }
    connection = pymysql.connect(**config)
  • 明明填写了密码,却提示using password: NO,到 google 各处转了一大圈,终于锁定了问题所在:使用了最新的 MySQL8.0,而

    MySQL8.0 用到了新的密码插件验证方式,5.7叫做mysql_native_password,8.0叫做caching_sha2_password,这种加密方式让很多和MySQL连接的界面工具(如Navicat)或编程语言(如PHP)mysqli接口失效。
    引用自掘金

  • 两种解决办法,一种是使用 mysql 官方实现的 python 接口 mysql-connector-python,一种是将 MySQL 降级为 5.7 版本。