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

3
在我的Mac电脑上安装了Mysql 8.0并更改了默认的root密码后,当我运行python3 manage.py migrate连接MySql并初始化数据库表时,出现错误django.db.utils.OperationalError: (1045:Access denied for user 'root'@'localhost' (using password: NO),但是我可以在控制台中使用root/new密码登录mysql而没有任何错误。
  • MySql版本:8.0 <-- 实际上是这个问题的关键
  • 操作系统:macOS 10.13.4
  • Python:3.6
  • Django:1.10.3

它使用pymysql与Mysql一起工作,我进行了大量的谷歌搜索和stackoverflow查询,最终我在CSDN技术博客中找到了解决方案。

只是想在stackoverflow上分享一下,如果您也遇到了这个问题,可以尝试下面答案中的方法。

7个回答

6
在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

在我的情况下,只有当我将每个键都打成大写字母时才能正常工作,就像这样

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

希望至少对像我这样的新手有所帮助。

0

manage.py 应该从 settings.py 中获取数据库访问凭据,这是一个特定的数据库用户(当然也包括该用户的密码)。如果对此错误消息做出反应并授予本地用户数据库登录权限,甚至是 root 用户,那将是一个安全错误!

问题在于:为什么 Django 不从 settings.py 中获取凭据?在我的情况下,settings.py 存在问题(我们正在从 Django Pipeline 到 Webpack 重构构建流程),我需要从 settings.py 中删除与 Pipeline 相关的部分以进行修复。问题在于为什么我没有收到有关 settings.py 问题的 Python 错误消息,而是收到了这个错误消息,这与实际问题无关。该错误消息只是源问题的中间结果。一旦我修复了 manage.py,凭据就像往常一样从 DATABASE 设置中获取,并且一切顺利。

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


0

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


0
如果root用户有您设置的密码。只需在setting.py中将“PASSWORD”更改为您的实际密码即可。对我有效。

0
对于任何偶然发现这篇文章的人,我实际上是想使用密码,但不小心将PASSWORD设置为None。这就解释了为什么它会说using password: NO。请确保您的PASSWORD不是None

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接