2012-06-23 20 views
22

Así que estoy aprendiendo Django (1, 3, 1, 'definitiva', 0) a través de este recurso: http://www.djangobook.com/en/2.0/chapter05/El uso de MySQL con Django - Acceso denegado para el usuario '@' localhost

He instalado 'mysql-server 'y' python-mysqldb 'a través de Synaptic. Cambié la configuración relevante en settings.py.

El libro mencionado anteriormente nos dice a correr desde el manage.py shell:

>>> from django.db import connection 
>>> cursor = connection.cursor() 

me sale este error después de ejecutar estos comandos:

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 me pidió para establecer una raíz contraseña cuando lo instalé la primera vez, ¿se utilizaría aquí? ¿O es otra cosa?

Respuesta

28

Su usuario no tiene acceso a una base de datos. Use los siguientes comandos para configurar su base de datos.

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; 

Además, debe tener suficientes privilegios para ejecutarlo. Guardarlo como script.sql entonces,

$mysql -u root -p < script.sql 

que en settings.py a donde tiene que asegurarse de que la configuración de DB están configurados correctamente

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.mysql', 
     'NAME': 'mydb',     
     'USER': 'mydb_user',    
     'PASSWORD': 'your_password',     
     'HOST': '',      
     'PORT': '',      
    } 
} 

y

python manage.py syncdb 

y ya terminaste

+1

Me sale el mismo error si intento "DROP DATABASE IF EXISTS' mydb'; " ERROR 1044 (42000): Acceso denegado para el usuario '' @ 'localhost' a la base de datos 'mydb' – user1265125

+0

Comprobar TEST = Verdadero en la configuración – gdoumenc

0

El libro de django ya es bastante viejo. en particular, la configuración de la base de datos ahora es un diccionario, en lugar de las variables descritas en el libro django.

mirando la última línea de su traceback, parece que está intentando conectarse sin un nombre de usuario.

intente cambiar

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

a

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

estoy usando Django (1, 3, 1, 'definitiva', 0) yo no era consciente de que DjangoBook no está actualizado. Ha sido una muy buena herramienta para ayudarme a aprender hasta ahora, ¿me recomiendan que lo deje? En realidad, mi configuración django parece un diccionario, así que ese no es el problema. – user1265125

4

También encontré este problema al seguir el tutorial de Django sobre pruebas (https://docs.djangoproject.com/en/dev/intro/tutorial05/). Cuando se trata de probar la aplicación urnas, recibí el siguiente error:

[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: 

El problema es que Django es la creación de una base de datos temporal denominado test_django_mysite.
Pude resolver este problema otorgando acceso a 'admin' @ 'localhost' en la base de datos test_django_mysite que estaba intentando crear.

mysql> GRANT ALL PRIVILEGES ON test_django_mysite.* TO [email protected] IDENTIFIED BY 'mypassword'; 
Query OK, 0 rows affected (0.04 sec) 

Vale la pena señalar que solo concedí los privilegios a test_django_mysite. No necesité realmente crearlo.

+1

¡otra razón más por la cual MySQL es una mierda! Con postgres, pude hacer $ psql> alterar el rol 'nombre de usuario' con create; Y eso es. Pasé 30 minutos en esto hoy, ¡y esta es la única respuesta que funcionó! –

0

Si cambió la contraseña de la base de datos y actualizó settings.py, también deberá reiniciar el proceso wsgi.py, por ejemplo reiniciando apache.

0

Voy a dejar mi respuesta aquí porque perdí unos minutos buenos (casi una hora) en este asunto.

Mire su copiar y pegar :) Desafortunadamente, MySQL volver éxito, mientras que la concesión de privilegios de usuario no existente para la base de datos no existente ...

Ambas consultas:

y

:
GRANT ALL PRIVILEGES ON python_db.* TO 'python_user'@'%' WITH GRANT OPTION 

volverá éxito. Aldo, no tengo un usuario como python_db y db llamado python_user. :) Eso es triste. Mi error pero también MySql no fue lo suficientemente útil con la salida. :)

1

Mi problema era que yo estaba editando settings.py mientras que la configuración se debería haber hecho en local_settings.py

Ahora todo parece funcionar.

Cuestiones relacionadas