J'apprends donc Django (1, 3, 1, 'final', 0) avec cette ressource: http://www.djangobook.com/fr/2.0/chapter05/
J'ai installé 'mysql-server' et 'python-mysqldb' via Synaptic. J'ai changé le paramètre approprié dans settings.py.
Le livre mentionné ci-dessus nous dit de courir à partir du shell manage.py:
>>> from Django.db import connection
>>> cursor = connection.cursor()
Je reçois cette erreur après avoir exécuté ces commandes:
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 m'a demandé de définir un mot de passe root lorsque je l'ai installé pour la première fois. Cela serait-il utilisé ici? Ou s'agit-il d'autre chose?
Votre utilisateur n'a pas accès à la base de données. Utilisez les commandes ci-dessous pour configurer votre base de données.
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;
En outre, vous devez avoir suffisamment de privilèges pour l'exécuter. Enregistrez-le en tant que script.sql,
$mysql -u root -p < script.sql
Ensuite, sur settings.py où vous devez vous assurer que vos paramètres de base de données sont configurés correctement
DATABASES = {
'default': {
'ENGINE': 'Django.db.backends.mysql',
'NAME': 'mydb',
'USER': 'mydb_user',
'PASSWORD': 'your_password',
'Host': '',
'PORT': '',
}
}
et
python manage.py syncdb
et tu as fini.
J'ai également rencontré ce problème en suivant le didacticiel Django sur les tests ( https://docs.djangoproject.com/en/dev/intro/tutorial05/ ). En essayant de tester l'application polls, j'ai reçu l'erreur suivante:
user@Host:~/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:
Le problème est que Django crée une base de données temporaire appelée test_Django_mysite.
J'ai pu résoudre ce problème en accordant l'accès à 'admin' @ 'localhost' sur la base de données test_Django_mysite qu'il tentait de créer.
mysql> GRANT ALL PRIVILEGES ON test_Django_mysite.* TO admin@localhost IDENTIFIED BY 'mypassword';
Query OK, 0 rows affected (0.04 sec)
Il est à noter que je n'ai accordé que les privilèges à test_Django_mysite. Je n'avais pas besoin de le créer.
Mon problème était que je modifiais settings.py alors que la configuration aurait dû être effectuée dans local_settings.py
Maintenant, tout semble fonctionner.
Si vous avez modifié le mot de passe de la base de données et mis à jour settings.py, vous devez également redémarrer le processus wsgi.py, par exemple en redémarrant Apache.
Le livre de Django est assez vieux maintenant. en particulier, les paramètres de base de données sont maintenant un dictionnaire, plutôt que le groupe de variables décrites dans le livre Django.
en regardant la dernière ligne de votre traceback, il semble que vous essayez de vous connecter sans nom d'utilisateur.
essayez de changer
DATABASE_ENGINE = ''
DATABASE_NAME = ''
DATABASE_USER = ''
DATABASE_PASSWORD = ''
à
DATABASES = {
'default': {
'ENGINE': '',
'NAME': ''
'USER': ''
# etc
}
}
Je vais juste laisser ma réponse ici car j'ai perdu quelques bonnes minutes (presque une heure) sur cette question.
Regardez votre copier-coller :) Malheureusement, mysql renvoie le succès tout en accordant des privilèges pour les utilisateurs non existants à la base de données non existante ...
Les deux requêtes:
GRANT ALL PRIVILEGES ON python_user.* TO 'python_db'@'%' WITH GRANT OPTION;
et:
GRANT ALL PRIVILEGES ON python_db.* TO 'python_user'@'%' WITH GRANT OPTION
retournera le succès. Aldo, je n'ai pas un tel utilisateur appelé python_db et db nommé python_user. :) C'est triste. Mon erreur mais aussi MySql n'était pas assez utile avec la sortie. :)
Vous devez vérifier les configurations de la base de données dans le fichier settings.py et indiquer également si votre utilisateur de base de données dispose des privilèges lui permettant d’accéder à la base de données et d’exécuter des opérations dessus.
S'il vous plaît voir si les solutions mentionnées ici travaille pour vous.