pymysql
和mysql-connector-python
均发生此错误。但不是MySQL外壳程序。 MySQL Shell能够正常通过mysql -u root -p
登录。
错误看起来像:
In [1]: import mysql.connector
In [2]: mydb = mysql.connector.connect(
...: host="localhost",
...: user="root",
...: passwd="password"
...: )
ProgrammingError: 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
或
In [8]: import pymysql.cursors
In [9]: connection = pymysql.connect(host='localhost',
...: user='root',
...: password='password',
...: db='db',
...: cursorclass=pymysql.cursors.DictCursor)
...
OperationalError: (1045, "Access denied for user 'root'@'localhost' (using password: YES)")
Python版本3.7,可在Mac OSX 10.14上运行。 MySQL版本8.0.16。
答案 0 :(得分:1)
我搜索了网站上的所有答案。找不到修复程序,因此希望记录此解决方案以帮助遇到类似情况的其他人。
pymysql
停止工作的罪魁祸首应该升级到MySQL8。MySQL8具有比以前的5.7更强的密码身份验证。从8降级到5.7是我不想经历的很多痛苦。通过编辑my.cnf
进行一次简单的尝试以恢复为旧式身份验证的尝试无效。
然后我读了这个博客:https://blog.csdn.net/zoe9698/article/details/78171465(中文)。
基本上是说用户不应为root
。 Python连接被视为“远程”,因此禁止以root
身份登录。
因此,只需创建另一个用户并向其授予所有特权即可。
mysql> CREATE USER 'user'@'localhost' IDENTIFIED BY 'password';
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT ALL PRIVILEGES ON *.* TO 'user'@'localhost';
Query OK, 0 rows affected (0.00 sec)
用root
替换代码中的user
,错误消失了。