2012-06-23 17 views
22

Ich lerne Django So (1, 3, 1, 'final', 0) durch diese Ressource: http://www.djangobook.com/en/2.0/chapter05/Benutzung von MySQL mit Django - Zugriff verweigert für Benutzer '@' localhost

Ich installierte ‚mysql-server 'und' python-mysqldb 'über Synaptic. Ich habe die entsprechende Einstellung in settings.py geändert.

Das Buch oben erwähnt erzählt uns von der manage.py Shell auszuführen:

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

ich diesen Fehler erhalten, nachdem diese Befehle ausführen:

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 mich fragte eine Wurzel gesetzt Passwort, wenn ich es das erste Mal installiert habe, würde das hier verwendet werden? oder ist es etwas anderes?

Antwort

28

Ihre Benutzer nicht um einen Zugriff auf Datenbank verfügt. Verwenden Sie die folgenden Befehle, um Ihre Datenbank einzurichten.

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; 

Auch müssen Sie über ausreichende Berechtigungen verfügen, um es auszuführen. Speichern Sie es als script.sql dann,

$mysql -u root -p < script.sql 

als auf settings.py, wo Sie müssen sicherstellen, dass Ihre db Einstellungen eingerichtet sind richtig

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

und

python manage.py syncdb 

und Sie sind fertig.

+1

Ich bekomme den gleichen Fehler, wenn ich versuche "DROP DATABASE IF EXISTS' mydb'; " Fehler 1044 (42000): Zugriff verweigert für Benutzer '' @ 'localhost' zur Datenbank 'mydb' – user1265125

+0

Überprüfen Sie TEST = True in Einstellungen – gdoumenc

0

Das Django-Buch ist mittlerweile ziemlich alt. Insbesondere Datenbankeinstellungen sind jetzt ein Wörterbuch, und nicht so viele Variablen wie im Django-Buch beschrieben.

Blick auf die letzte Zeile Ihrer Traceback, es sieht aus wie es versucht, ohne einen Benutzernamen verbinden.

try Wechsel

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

zu

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

Ich benutze Django (1, 3, 1, 'final', 0) Ich war mir nicht bewusst, dass DjangoBook veraltet ist. Es war ein sehr gutes Werkzeug, um mir zu helfen, bis jetzt zu lernen, empfiehlst du mir, es zu verlassen? Eigentlich meine Django-Einstellung sieht aus wie ein Wörterbuch, so dass das nicht das Problem ist. – user1265125

4

Ich stieß auch auf dieses Problem, während ich dem Django-Tutorial zum Testen folgte (https://docs.djangoproject.com/en/dev/intro/tutorial05/). Beim Versuch, die Umfragen App zu testen, erhielt ich folgende Fehlermeldung:

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

Das Problem ist, dass django eine temporäre Datenbank test_django_mysite genannt wird, zu schaffen.
Ich konnte dieses Problem lösen, indem ich den Zugriff auf 'admin' @ 'localhost' in der test_django_mysite-Datenbank gewährte, die es zu erstellen versuchte.

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

Es ist erwähnenswert, dass ich nur die Berechtigungen für test_django_mysite gewährt. Ich musste es nicht wirklich erstellen.

+1

noch ein Grund, warum MySQL saugt! Mit postgres konnte ich $ psql> alter rolle 'username' mit create; Und das ist es. Ich habe heute 30 Minuten damit verbracht, und das ist die einzige Antwort, die funktioniert hat! –

0

Wenn Sie das Kennwort der Datenbank geändert und settings.py aktualisiert haben, müssen Sie auch den Prozess wsgi.py neu starten, indem Sie beispielsweise den Apache neu starten.

0

Ich werde nur meine Antwort hier lassen, weil ich einige gute Minuten (fast Stunde) in dieser Angelegenheit verloren habe.

Ihre copy-paste beobachten :) Leider mysql Erfolg zurückkehren, während priviliges Gewährung für Benutzer nicht vorhandenen nicht Datenbank vorhandenen ...

Beiden Abfragen:

und:

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

wird Erfolg zurückgeben. Aldo Ich habe keinen solchen Benutzer namens python_db und db namens python_user. :) Das ist traurig. Mein Fehler aber auch MySql war bei der Ausgabe nicht hilfreich genug. :)

1

Mein Problem war, dass ich die Bearbeitung settings.py während Konfiguration in local_settings.py

Jetzt ist alles scheint zu funktionieren hätte getan werden sollen.

Verwandte Themen