Использование MySQL с Django - доступ запрещен для пользователя '@' localhost
Итак, я изучаю Django (1, 3, 1, 'final', 0) через этот ресурс: http://www.djangobook.com/en/2.0/chapter05/ p >
Я установил 'mysql-server' и 'python-mysqldb' через Synaptic. Я изменил соответствующую настройку в settings.py.
В упомянутой книге говорится, что мы запускаем ее из оболочки manage.py:
>>> 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, когда я установил его в первый раз, будет ли он использован здесь? Или что-то еще?
Ответы
Ответ 1
У вашего пользователя нет доступа к базе данных. Используйте команды ниже, чтобы настроить свою базу данных.
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, где вам нужно убедиться, что настройки db настроены правильно
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'mydb',
'USER': 'mydb_user',
'PASSWORD': 'your_password',
'HOST': '',
'PORT': '',
}
}
и
python manage.py syncdb
и все готово.
Ответ 2
Я также столкнулся с этой проблемой, следуя руководству по тестированию Django (https://docs.djangoproject.com/en/dev/intro/tutorial05/). При попытке проверить приложение опросов я получил следующую ошибку:
[email protected]:~/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.
Я смог решить эту проблему, предоставив доступ к "admin" @ "localhost" в базе данных test_django_mysite, которую он пытался создать.
mysql> GRANT ALL PRIVILEGES ON test_django_mysite.* TO [email protected] IDENTIFIED BY 'mypassword';
Query OK, 0 rows affected (0.04 sec)
Стоит отметить, что я только предоставил привилегии test_django_mysite. Мне не нужно было его создавать.
Ответ 3
Моя проблема заключалась в том, что я редактировал settings.py, тогда как конфигурация должна была быть выполнена в local_settings.py
Теперь все работает.
Ответ 4
Книга джанго довольно старая. в частности, настройки базы данных теперь являются словарем, а не связью переменных, описанных в книге django.
глядя на последнюю строку вашего трассировки, похоже, что он пытается подключиться без имени пользователя.
попробуйте изменить
DATABASE_ENGINE = ''
DATABASE_NAME = ''
DATABASE_USER = ''
DATABASE_PASSWORD = ''
к
DATABASES = {
'default': {
'ENGINE': '',
'NAME': ''
'USER': ''
# etc
}
}
Ответ 5
Если вы изменили пароль базы данных и обновили settings.py, вам также придется перезапустить процесс wsgi.py, например, перезапустив apache.
Ответ 6
Просто оставим свой ответ здесь, потому что я потерял несколько хороших минут (почти час) по этому поводу.
Смотреть свою копию-вставку:) К сожалению, mysql возвращает успех, предоставляя priviliges для не существующего пользователя к существующей базе данных...
Оба запроса:
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 и db с именем python_user.:) Это печально. Моя ошибка, но также и MySql, была недостаточной для вывода.:)