Lorsque j'essaie de tester une application avec une commande (je l'ai remarqué lorsque j'ai essayé de déployer mon projet à l'aide de fabric, qui utilise cette commande):
python manage.py test appname
J'obtiens cette erreur:
Creating test database for alias 'default'...
Got an error creating the test database: permission denied to create database
Type 'yes' if you would like to try deleting the test database 'test_finance', or 'no' to cancel
syncdb
la commande semble fonctionner. Mes paramètres de base de données dans settings.py:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
'NAME': 'finance', # Or path to database file if using sqlite3.
'USER': 'django', # Not used with sqlite3.
'PASSWORD': 'mydb123', # Not used with sqlite3.
'HOST': '127.0.0.1', # Set to empty string for localhost. Not used with sqlite3.
'PORT': '', # Set to empty string for default. Not used with sqlite3.
}
}
la source
GRANT ALL PRIVILEGES ON test_my_db.* TO 'my_user'@'localhost';
J'ai trouvé une solution intéressante à votre problème.
En fait, pour MySQL, vous pouvez accorder des privilèges pour une base de données non existante.
Vous pouvez donc ajouter le nom 'test_finance' pour votre base de données de test dans vos paramètres:
démarrez le shell MySQL en tant qu'utilisateur root:
et accordez maintenant tous les privilèges à cette base de données non existante dans MySQL:
Django va maintenant démarrer les tests sans aucun problème.
la source
Dans le cas de Postgres, l'utilisateur doit avoir l'
createdb
autorisation.Consultez cette documentation: https://docs.djangoproject.com/en/2.0/topics/testing/overview/#the-test-database
la source
Si la base de données est mysql, ces deux changements feront les choses.
1.Ouvrez mysite / mysite / settings.py
Les paramètres de votre base de données doivent avoir un bloc TEST supplémentaire comme indiqué avec projectname_test .
Tapez la commande ci-dessous à l'aide de l' invite de commande mysql ou de mysql workbench pour donner tous les privilèges à l'utilisateur spécifié dans settings.py
Vous pouvez maintenant courir
python manage.py test polls
.la source
Si vous utilisez
docker-compose
ce qui a fonctionné pour moi, c'est ce qui suit:ou
Mes paramètres ressemblent à ceci:
et mes
docker-compose.yml
regards comme suit:la source
Dans mon cas, les solutions GRANT PRIVILEGES ne fonctionnaient pas avec Python 3.7.2 , Django 2.1.7 et MySQL 5.6.23 ... Je ne sais pas pourquoi.
J'ai donc décidé d'utiliser SQLite comme base de données TEST ...
Après cela, la voiture TESTS fonctionne sans problèmes:
la source
Wow, donc combiner toutes les réponses ici avec un petit ajustement m'a finalement permis de trouver une solution de travail pour docker-compose, django et postgres ...
Premièrement, la commande postgres donnée par noufal valapra n'est pas correcte (ou peut-être tout simplement pas actuelle), elle devrait être:
Dans le cas d'une configuration docker-compose, cela ira dans le fichier init.sql, voici à quoi ressemble le mien:
Ensuite, le Dockerfile pour postgres ressemble à ceci:
Ensuite, le Django settings.py a cette entrée:
et le docker-compose ressemble à ceci:
version: «3.6»
prestations de service:
la source
Peut-être que vous mettez votre test en mode suspendu ou en tant que travail en arrière-plan. Essayez avec la
fg
commande dans le shell bash.la source
Un compte superutilisateur est le moyen le plus simple de garantir des tests fluides. donc une manière plus simple de faire l'
django
utilisateur su est de faireALTER django WITH SUPERUSER
.pour plus d'informations https://www.postgresql.org/docs/current/sql-alteruser.html
la source