使用MySQL与Django - 用户'@'localhost拒绝访问

use*_*125 23 python mysql django

所以我通过这个资源学习Django(1,3,1,'final',0):http://www.djangobook.com/en/2.0/chapter05/

我通过Synaptic安装了'mysql-server'和'python-mysqldb'.我更改了settings.py中的相关设置.

上面提到的这本书告诉我们从manage.py shell运行:

>>> from django.db import connection
>>> cursor = connection.cursor()
Run Code Online (Sandbox Code Playgroud)

运行这些命令后出现此错误:

OperationalError: (1044, "Access denied for user ''@'localhost' to database 'mydb'")

  Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/usr/lib/python2.7/dist-packages/django/db/backends/__init__.py", line 250, in cursor
    cursor = self.make_debug_cursor(self._cursor())
  File "/usr/lib/python2.7/dist-packages/django/db/backends/mysql/base.py", line 322, in _cursor
    self.connection = Database.connect(**kwargs)
  File "/usr/lib/python2.7/dist-packages/MySQLdb/__init__.py", line 81, in Connect
    return Connection(*args, **kwargs)
  File "/usr/lib/python2.7/dist-packages/MySQLdb/connections.py", line 187, in __init__
    super(Connection, self).__init__(*args, **kwargs2)
OperationalError: (1044, "Access denied for user ''@'localhost' to database 'mydb'")
Run Code Online (Sandbox Code Playgroud)

当我第一次安装时,MySQL确实要求我设置root密码,这会在这里使用吗?或者是别的什么?

mat*_*eek 28

您的用户无权访问数据库.使用以下命令设置数据库.

DROP DATABASE IF EXISTS `mydb`;
CREATE DATABASE `mydb`
    DEFAULT CHARACTER SET utf8
    DEFAULT COLLATE utf8_general_ci;

USE 'mysql';
GRANT ALL PRIVILEGES ON mydb.* TO 'mydb_user'@'localhost' IDENTIFIED BY 'your_password'

WITH GRANT OPTION;
FLUSH PRIVILEGES;
Run Code Online (Sandbox Code Playgroud)

此外,您需要具有足够的权限才能运行它.保存为script.sql然后,

$mysql -u root -p < script.sql
Run Code Online (Sandbox Code Playgroud)

而不是在settings.py上,您需要确保正确设置数据库设置

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'mydb',                  
        'USER': 'mydb_user',             
        'PASSWORD': 'your_password',                  
        'HOST': '',                     
        'PORT': '',                      
    }
}
Run Code Online (Sandbox Code Playgroud)

和

python manage.py syncdb
Run Code Online (Sandbox Code Playgroud)

你完成了

  • 如果我尝试“DROP DATABASE IF EXISTS `mydb`;”,我会得到同样的错误 错误 1044 (42000):用户 ''@'localhost' 对数据库 'mydb' 的访问被拒绝 (2认同)