所以我通过这个资源学习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密码,这会在这里使用吗?或者是别的什么?
答案 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。我更新了设置文件以解决该问题。