django.db.utils.OperationalError:(1045:拒绝访问用户' root' @' localhost'(使用密码:否)

时间:2018-06-02 00:53:06

标签: python mysql django

我在mac中安装Mysql 8.0后,更改了默认的root密码, 当我运行django.db.utils.OperationalError: (1045:Access denied for user 'root'@'localhost' (using password: NO)来连接MySql和init数据库表时,我收到错误python3 manage.py migrate,而我可以在控制台中使用root / new密码登录mysql而没有任何错误。

  • MySql版本:8.0< - 实际上是这个问题的关键
  • 操作系统:macOS 10.13.4
  • Python:3.6
  • Django:1.10.3

它使用pymysql与Mysql一起工作,我做了很多谷歌,也在stackorverflow,最后我找到了解决方案in a CSDN tech blog

只想在stackoverflow中分享它,如果你也遇到过这个问题,你可能想尝试下面的答案。

7 个答案:

答案 0 :(得分:1)

在mysql控制台中运行以下命令,将密码加密方法更改为Mysql中的旧版本(在Mysql 8.0中更改为使用cha2)

mysql -u root -p
use mysql;
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'newpassword';  
FLUSH PRIVILEGES;

然后你应该可以自由地运行python manage.py migrate

答案 1 :(得分:0)

manage.py应该从settings.py那里获取数据库访问凭据,这是一个特定的数据库用户(当然也包括该用户的密码)。通过向本地用户授予数据库登录特权来响应此错误消息,这将是一个安全错误,上帝禁止root!

问题是,为什么Django不从settings.py中提取凭证?在我的情况下,settings.py存在问题(我们正在将构建管道从django管道重组到webpack),我需要从settings.py中删除与管道相关的部分以进行修复。这是一个问题,为什么我没有收到关于settings.py问题的任何python错误消息,但是却收到了此错误,它不是真正问题的局部原因。该错误消息只是源问题的传递结果。修复manage.py后,照常从数据库设置中获取凭据,一切顺利。

所以解决方案是检查和调试settings.py,这有点困难,因为我没有收到有关直接错误的消息。

答案 2 :(得分:0)

对于任何遇到此问题的人,我实际上是在尝试使用密码,但无意中将http://dockerIP:8080/auth/admin/ 设置为PASSWORD。这解释了为什么说None。确保您的using password: NO不是PASSWORD

答案 3 :(得分:0)

使用以下命令

service myql stop
sudo /opt/lampp/lampp stop
sudo netstat -nap | grep :80

如果apache服务器正在运行,它将在“ apache2”关键字之前显示一个数字 如果是,写

sudo kill number
sudo /opt/lampp/lampp start

否则

sudo /opt/lampp/lampp start

答案 4 :(得分:0)

在我的情况下,当我这样输入大写字母中的每个键时,它都起作用

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'myproj',
        'USER': 'root',
        'PASSWORD': 'password',
        'PORT': '3306',
        'HOST': 'localhost',
 }
   }

希望它对像我这样的菜鸟有帮助。

答案 5 :(得分:0)

我通过将 PASSWORD (DATABASES dict) 中的 settings.py 字段更改为 password 解决了这个问题。

答案 6 :(得分:0)

如果 root 用户有你设置的密码。只需在 setting.py 中将 'PASSWORD': 更改为您的真实密码。为我工作。