Подтвердить что ты не робот

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

4b9b3361

Ответ 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, была недостаточной для вывода.:)