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

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

Я установил «MySQL-сервер» и "python-mysqldb" через синаптик. Я изменил соответствующие настройки в 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, когда я установил его в первый раз, будет ли он использоваться здесь? Или что-то еще?

Ответы на вопрос(7)

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

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

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

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

в

DATABASES = {
    'default': {
        'ENGINE': '',
        'NAME': ''
        'USER': ''
        # etc
    }
}
 user126512523 июн. 2012 г., 16:17
Я использую Django (1, 3, 1, «final», 0). Я не знал, что DjangoBook устарел. Это был очень хороший инструмент, чтобы помочь мне учиться до сих пор, вы рекомендуете оставить его? На самом деле моя настройка django действительно похожа на словарь, так что это не проблема.

Я также столкнулся с этой проблемой, следуя учебнику по 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' a '; @' localhost 'apos; в базе данных 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. Мне не нужно было его создавать.

 29 окт. 2014 г., 21:42
Еще одна причина, почему MySQL отстой! С postgres я смог сделать $ psql & gt; изменить роль "имя пользователя"; с созданием; И ЭТО. Я потратил 30 минут на это сегодня, и это единственный ответ, который сработал!

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

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

Теперь все, кажется, работает.

Решение Вопроса

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

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

и вы сделали.

 user126512523 июн. 2012 г., 16:29
Я получаю ту же ошибку, если я пытаюсь "DROP DATABASE, ЕСЛИ СУЩЕСТВУЕТ"mydb; & Quot; ОШИБКА 1044 (42000): доступ запрещен для пользователя "@" локальный ". в базу данных "mydb";
 26 мая 2014 г., 22:11
Проверьте TEST = True в настройках

Вам необходимо проверить конфигурацию базы данных вsettings.py файл, а также, если ваш пользователь БД имеет право доступа к базе данных и выполнения операций с ней.

Пожалуйста, посмотрите, если упомянутые решенияВот работает для вас.

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

Следите за своим копированием-вставкой :) К сожалению, 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

вернет успех. Также у меня нет такого пользователя с именем python_db и db с именем python_user. :) Это печально. Моя ошибка, но и MySql не помогли с выводом. :)

Ваш ответ на вопрос