Cuando trato de probar cualquier aplicación con comando (lo noté cuando traté de implementar mi proyecto usando fabric, que usa este comando):
python manage.py test appname
Me sale este error:
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
El comando parece funcionar. La configuración de mi base de datos en 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.
}
}
fuente
GRANT ALL PRIVILEGES ON test_my_db.* TO 'my_user'@'localhost';
He encontrado una solución interesante a tu problema.
De hecho, para MySQL puede otorgar privilegios para bases de datos no existentes.
Por lo tanto, puede agregar el nombre 'test_finance' para su base de datos de prueba en su configuración:
Inicie MySQL Shell como usuario root:
y ahora otorgue todos los privilegios a esta base de datos no existente en MySQL:
Ahora Django comenzará las pruebas sin ningún problema.
fuente
En el caso de Postgres, el usuario debe tener
createdb
permiso.Consulte esta documentación: https://docs.djangoproject.com/en/2.0/topics/testing/overview/#the-test-database
fuente
Si la base de datos es mysql , estos dos cambios harán las cosas.
1.Abra mysite / mysite / settings.py
La configuración de su base de datos debe tener un bloque TEST adicional como se muestra con projectname_test .
2. Escriba el comando a continuación utilizando el símbolo del sistema mysql o mysql workbench para dar todos los privilegios al usuario especificado en settings.py
Ahora puedes correr
python manage.py test polls
.fuente
Si está utilizando
docker-compose
lo que funcionó para mí fue lo siguiente:o
Mi configuración se ve así:
y mi
docker-compose.yml
aspecto de la siguiente manera:fuente
En mi caso, las soluciones GRANT PRIVILEGES no funcionaron con Python 3.7.2 , Django 2.1.7 y MySQL 5.6.23 ... No sé por qué.
Entonces decidí usar SQLite como base de datos TEST ...
Después de eso, el auto TESTS corre sin problemas:
fuente
Wow, así que combinar todas las respuestas aquí con un pequeño ajuste finalmente me llevó a una solución de trabajo para docker-compose, django y postgres ...
Primero, el comando postgres dado por noufal valapra no es correcto (o tal vez simplemente no es actual), debería ser:
En el caso de una configuración docker-compose, esto irá en el archivo init.sql, así es como se ve el mío:
Entonces el Dockerfile para postgres se ve así:
Entonces el Django settings.py tiene esta entrada:
y el docker-compose se ve así:
versión: '3.6'
servicios:
fuente
Tal vez pones tu prueba en modo suspendido o como un trabajo en segundo plano. Intente con el
fg
comando en bash shell.fuente
Una cuenta de superusuario es la forma más fácil de garantizar una prueba sin problemas. por lo que una forma más sencilla de hacer que el
django
usuario Do es hacerloALTER django WITH SUPERUSER
.para más información https://www.postgresql.org/docs/current/sql-alteruser.html
fuente