2012-06-23 16 views
22

Więc uczę Django (1, 3, 1, 'ostateczny', 0) do tego zasobu: http://www.djangobook.com/en/2.0/chapter05/MySQL z Django - Access denied for user '@' localhost

zainstalowałem „mysql-server 'i' python-mysqldb 'przez Synaptic. Zmieniłem odpowiednie ustawienie w pliku settings.py.

Książka wspomniano powyżej każe nam biec od manage.py shell:

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

otrzymuję ten błąd po uruchomieniu tych poleceń:

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 prosił mnie, aby ustawić korzeń hasło, kiedy zainstalowałem go po raz pierwszy, czy będzie to wykorzystane tutaj? czy jest to coś innego?

Odpowiedz

28

Twój użytkownik nie ma dostępu do bazy danych. Użyj poniższych poleceń, aby skonfigurować bazę danych.

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; 

Musisz również mieć wystarczające uprawnienia, aby go uruchomić. Zapisz go jako script.sql następnie,

$mysql -u root -p < script.sql 

niż do settings.py gdzie trzeba się upewnić, czy ustawienia db są ustawione prawidłowo

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

i

python manage.py syncdb 

i Jesteś skończony.

+1

Ten sam błąd pojawia się, gdy próbuję "DROP DATABASE IF EXISTS' mydb'; " BŁĄD 1044 (42000): Odmowa dostępu dla użytkownika '@' localhost 'do bazy danych' mydb ' – user1265125

+0

Sprawdź TEST = Prawda w ustawieniach – gdoumenc

0

Książka django jest już dość stara. w szczególności ustawienia bazy danych są teraz słownikiem, a nie grupą zmiennych opisanych w książce django.

patrząc na ostatnią linię twojego śledzenia, wygląda na to, że próbuje połączyć się bez nazwy użytkownika.

Spróbuj zmienić

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

do

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

Używam Django (1, 3, 1, "ostateczny", 0) Nie wiedziałem, że DjangoBook jest nieaktualny. To było bardzo dobre narzędzie, które pomoże mi uczyć się do tej pory. Czy polecasz mi to zostawić? W rzeczywistości moje ustawienia django wyglądają jak słownik, więc to nie jest problem. – user1265125

4

Wystąpił również ten problem podczas korzystania z samouczka Django na temat testowania (https://docs.djangoproject.com/en/dev/intro/tutorial05/). Gdy próbuje przetestować aplikację ankietach, otrzymałem następujący błąd:

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

Problem polega na tym, że Django jest stworzenie tymczasowej bazy danych o nazwie test_django_mysite.
Byłem w stanie rozwiązać ten problem, przyznając dostęp do "admin '@' localhost" w bazie danych test_django_mysite, którą próbował utworzyć.

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

Warto zauważyć, że przyznano mi tylko uprawnienia do test_django_mysite. Nie musiałem go tworzyć.

+1

to kolejny powód, dla którego MySQL jest do bani! Dzięki postgresowi udało mi się zrobić $ psql> zmienić rolę "username" z create; I to wszystko. Dzisiaj poświęciłem na to 30 minut i to jest jedyna odpowiedź, która zadziałała! –

0

Po zmianie hasła bazy danych i zaktualizowaniu pliku settings.py konieczne będzie również ponowne uruchomienie procesu wsgi.py, na przykład poprzez ponowne uruchomienie apache.

0

Zostawię tutaj moją odpowiedź, ponieważ straciłem kilka dobrych minut (prawie godziny) w tej sprawie.

Watch Your copy-paste :) Niestety, mysql powrócić sukces podczas udzielania priviliges dla nie istniejącego użytkownika do nie istniejącej bazy danych ...

Oba wyszukiwania:

a:

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

zwróci sukces. Aldo Nie mam takiego użytkownika o nazwie python_db i db o nazwie python_user. :) To smutne. Mój błąd, ale także MySql, nie był wystarczająco pomocny w kwestii wyników. :)

1

Moim problemem było to, że edytowanie settings.py natomiast konfiguracja powinna zostały wykonane w local_settings.py

Teraz wszystko wydaje się działać.

Powiązane problemy