python - test - Error de la aplicación de prueba django-Obtuve un error al crear la base de datos de prueba: permiso denegado para crear una base de datos
raw sql django (4)
Cuando intento probar cualquier aplicación con el comando (lo noté cuando intenté implementar myproject 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
comando syncdb
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.
}
}
Cuando Django ejecuta el banco de pruebas, crea una nueva base de datos, en su caso test_finance
. El usuario postgres con nombre de usuario django
no tiene permiso para crear una base de datos, de ahí el mensaje de error.
Cuando ejecuta syncdb
o syncdb
, Django no intenta crear la base de datos de finance
, por lo que no obtiene ningún error.
Puede agregar el permiso createdb al usuario de django ejecutando el siguiente comando en el shell de postulación como superusuario (punta de sombrero para esta respuesta de desbordamiento de pila ).
=> ALTER USER django CREATEDB;
Nota: El nombre de usuario utilizado en ALTER USER <username> CREATEDB;
El comando necesita coincidir con el usuario de la base de datos en los archivos de configuración de Django. En este caso, el póster original, tenía al usuario como django
la respuesta anterior.
En el caso de Postgres, el usuario debe haber createdb
permiso createdb
.
ALTER ROLE miriam CREATEDB;
Consulte esta documentación: https://docs.djangoproject.com/en/2.0/topics/testing/overview/#the-test-database
He encontrado una solución interesante para tu problema.
De hecho, para MySQL puede otorgar privilegios para una base de datos no existente.
Para que pueda agregar el nombre ''test_finance'' para su base de datos de prueba en su configuración:
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.
''TEST'': {
''NAME'': ''test_finance'',
},
}
}
Inicie MySQL shell como usuario root:
mysql -u root -p
y ahora otorgue todos los privilegios a esta base de datos no existente en MySQL:
GRANT ALL PRIVILEGES ON test_finance.* TO ''django''@''localhost'';
Ahora Django comenzará las pruebas sin ningún problema.
Si la base de datos es mysql , estos dos cambios harán las cosas.
1. Abre mysite / mysite / settings.py
La configuración de su base de datos debe tener un bloque TEST adicional como se muestra con projectname_test .
DATABASES = {
''default'': {
''ENGINE'': ''django.db.backends.mysql'',
''NAME'': ''myproject'',
''USER'': ''chandan'',
''PASSWORD'': ''root'',
''HOST'': ''localhost'',
''PORT'': ''3306'',
''TEST'': {
''NAME'': ''myproject_test'',
},
}
}
2. Ingrese el siguiente comando usando el símbolo del sistema mysql o mysql workbench para dar todos los privilegios al usuario especificado en settings.py
GRANT ALL PRIVILEGES ON myproject_test.* TO ''chandan''@''localhost'';
Ahora puede ejecutar python manage.py test polls
.