将 MySQL 与 Django 一起使用 - 用户 '@'localhost 的访问被拒绝

新手上路,请多包涵

所以我正在通过这个资源学习 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密码,这里会用到吗?或者是别的什么?

原文由 user1265125 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 654
2 个回答

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

 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

你就完成了。

原文由 matcheek 发布,翻译遵循 CC BY-SA 3.0 许可协议

我在遵循 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 权限。我不需要实际创建它。

原文由 jbiz 发布,翻译遵循 CC BY-SA 3.0 许可协议

推荐问题