我在mac上安装了mysql8.0,并更改了默认的超级用户密码后,在运行python3 manage.py migrate连接Mysql和init数据库表时,我得到了错误django.db.utils.OperationalError: (1045:Access denied for user 'root'@'localhost' (using password: NO),而我可以在控制台中使用超级用户/新密码登录MySql,没有任何错误。
它使用的是pymysql和Mysql,我在google和stackorverflow中做了很多工作,最后我找到了解决方案in a CSDN tech blog
只是想在stackoverflow中分享它,如果你也遇到了这个问题,你可能想尝试下面答案中的方法。
发布于 2018-06-02 09:04:51
在mysql控制台运行以下命令,将Mysql的密码加密方式改为旧版本(mysql8.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了。
发布于 2020-10-01 11:07:08
在我的例子中,当我像这样用大写字母键入每个键时,它就会起作用
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'myproj',
'USER': 'root',
'PASSWORD': 'password',
'PORT': '3306',
'HOST': 'localhost',
}
}希望它至少能帮助像我这样的菜鸟。
发布于 2018-10-10 15:52:31
manage.py应该从settings.py获取数据库访问凭证,这是一个特定的数据库用户(当然还有该用户的密码)。通过授予本地用户数据库登录权限来响应此错误消息将是一个安全错误,天哪,请不要这样做!
更确切地说,问题是:为什么Django没有从settings.py那里拿到证书?在我的例子中,settings.py出现了问题(我们正在将构建管道从django pipeline重构到webpack),我需要从我的settings.py中删除与管道相关的部分以进行修复。这是一个问题,为什么我没有得到任何关于settings.py问题的python错误消息,而是我得到了这个错误,它不是真正的问题所在。该错误消息只是源问题的传递结果。一旦我修复了manage.py,凭据就像往常一样从数据库设置中提取出来了,一切都很顺利。
因此,解决方案是检查和调试settings.py,这有点困难,因为我没有得到关于直接错误的消息。
https://stackoverflow.com/questions/50652587
复制相似问题