25

所以我正在通过这个资源学习 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()

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

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'")

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

4

8 回答 8

30

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

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;

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

$mysql -u root -p < script.sql

比 settings.py 需要确保您的数据库设置正确设置的地方

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'mydb',                  
        'USER': 'mydb_user',             
        'PASSWORD': 'your_password',                  
        'HOST': '',                     
        'PORT': '',                      
    }
}

python manage.py syncdb

你就完成了。

于 2012-06-23T14:25:14.343 回答
4

在遵循 Django 测试教程( https://docs.djangoproject.com/en/dev/intro/tutorial05/)时,我也遇到了这个问题。在尝试测试民意调查应用程序时,我收到以下错误:

user@host:~/django/mysite$ python manage.py test polls

Creating test database for alias 'default'...
Got an error creating the test database: (1044, "Access denied for user 'admin'@'localhost' to database 'test_django_mysite'")
Type 'yes' if you would like to try deleting the test database 'test_django_mysite', or 'no' to cancel: 

问题是 django 正在创建一个名为 test_django_mysite 的临时数据库。
我能够通过授予对它试图创建的 test_django_mysite 数据库上的“admin”@“localhost”的访问权限来解决这个问题。

mysql> GRANT ALL PRIVILEGES ON test_django_mysite.* TO admin@localhost IDENTIFIED BY 'mypassword';
Query OK, 0 rows affected (0.04 sec)

值得注意的是,我只授予了 test_django_mysite 的权限。我不需要实际创建它。

于 2013-06-03T21:20:24.530 回答
1

我的问题是我正在编辑settings.py而配置应该在local_settings.py中完成

现在一切似乎都奏效了。

于 2016-03-04T21:39:22.730 回答
0

django 书现在已经相当老了。特别是,数据库设置现在是一个字典,而不是 django 书中描述的一堆变量。

查看回溯的最后一行,看起来它正在尝试在没有用户名的情况下进行连接。

尝试改变

DATABASE_ENGINE = ''
DATABASE_NAME = ''
DATABASE_USER = ''
DATABASE_PASSWORD = ''

DATABASES = {
    'default': {
        'ENGINE': '',
        'NAME': ''
        'USER': ''
        # etc
    }
}
于 2012-06-23T14:13:53.793 回答
0

如果您更改了数据库密码并更新了 settings.py,您还必须重新启动 wsgi.py 进程,例如通过重新启动 apache。

于 2014-08-18T14:58:51.090 回答
0

您需要验证settings.py文件中的数据库配置,以及您的 db 用户是否有权访问数据库并对其执行操作。

请查看此处提到的解决方案是否适合您。

于 2018-10-08T10:18:54.177 回答
0

我遇到了类似的问题,但所有设置似乎都是正确的。后来我注意到 MySQL 正在使用端口 3308,但我的 Django 设置文件中有端口 3306。我更新了设置文件以解决问题。

于 2021-02-16T04:22:16.930 回答
-1

只是将我的答案留在这里,因为我在这件事上失去了几分钟(近一个小时)。

注意你的复制粘贴:)不幸的是,mysql返回成功,同时授予不存在的用户对不存在的数据库的权限......

两个查询:

GRANT ALL PRIVILEGES ON python_user.* TO 'python_db'@'%' WITH GRANT OPTION;

和:

GRANT ALL PRIVILEGES ON python_db.* TO 'python_user'@'%' WITH GRANT OPTION

将返回成功。奥尔多我没有名为 python_db 的用户和名为 python_user 的数据库。:) 这很可悲。我的错误,但 MySql 对输出的帮助也不够。:)

于 2015-09-01T09:33:02.830 回答