Использование MySQL с Django – доступ запрещен для пользователя '@' localhost

Поэтому я изучаю Django (1, 3, 1, «final», 0) через этот ресурс: http://www.djangobook.com/en/2.0/chapter05/

Я установил '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, когда я установил его в первый раз, будет ли он использован здесь? Или что-то еще?

6 Solutions collect form web for “Использование MySQL с Django – доступ запрещен для пользователя '@' localhost”

У вашего пользователя нет доступа к базе данных. Для настройки базы данных используйте приведенные ниже команды.

 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 

и вы сделали.

Я также столкнулся с этой проблемой, следуя учебнику по тестированию 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.
Я смог решить эту проблему, предоставив доступ к «admin» @ «localhost» в базе данных test_django_mysite, которую он пытался создать.

 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. Мне не нужно было создавать его.

Моя проблема заключалась в том, что я редактировал settings.py, тогда как настройка должна была быть выполнена в файле local_settings.py

Теперь все работает.

К настоящему времени книга джанго довольно старая. в частности, параметры базы данных теперь являются словарем, а не связью переменных, описанных в книге django.

глядя на последнюю строку вашего трассировки, похоже, что он пытается подключиться без имени пользователя.

попробуйте изменить

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

в

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

Если вы изменили пароль базы данных и обновили settings.py, вам также придется перезапустить процесс wsgi.py, например, перезапустив apache.

Просто оставим свой ответ здесь, потому что я потерял несколько хороших минут (почти час) по этому поводу.

Смотрите свою копию-вставку 🙂 К сожалению, 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, была недостаточной для вывода. 🙂

Python - лучший язык программирования в мире.