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

时间:2012-06-23 14:09:28

标签: 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()

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

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密码,这会在这里使用吗?或者是别的什么?

8 个答案:

答案 0 :(得分: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;

此外,您需要具有足够的权限才能运行它。将其保存为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

你已经完成了。

答案 1 :(得分: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的权限。我不需要实际创建它。

答案 2 :(得分:1)

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

中完成

现在一切似乎都有效。

答案 3 :(得分:0)

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

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

尝试更改

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

DATABASES = {
    'default': {
        'ENGINE': '',
        'NAME': ''
        'USER': ''
        # etc
    }
}

答案 4 :(得分:0)

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

答案 5 :(得分:0)

我要在这里留下答案,因为我在这件事上几分钟(差不多一小时)就没那么好了。

观看您的复制粘贴:)不幸的是,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

会回归成功。 Aldo我没有这样一个名为python_db的用户和名为python_user的db。 :)那太可悲了。我的错误,但MySql对输出没有帮助。 :)

答案 6 :(得分:0)

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

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

答案 7 :(得分:0)

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