Quando tento testar qualquer aplicativo com comando (notei quando tentei implantar meu projeto usando fabric, que usa este comando):
python manage.py test appname
Eu recebo este erro:
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 parece funcionar. Minhas configurações de banco de dados em 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.
}
}
fonte
GRANT ALL PRIVILEGES ON test_my_db.* TO 'my_user'@'localhost';
Encontrei uma solução interessante para o seu problema.
De fato, para o MySQL, você pode conceder privilégios para bancos de dados inexistentes.
Portanto, você pode adicionar o nome 'test_finance' ao seu banco de dados de teste nas suas configurações:
inicie o shell MySQL como usuário root:
e agora conceda todos os privilégios a esse banco de dados inexistente no MySQL:
Agora o Django iniciará os testes sem problemas.
fonte
No caso do Postgres, o usuário deve ter
createdb
permissão.Consulte esta documentação: https://docs.djangoproject.com/en/2.0/topics/testing/overview/#the-test-database
fonte
Se o banco de dados for mysql , essas duas alterações farão as coisas.
1.Abra mysite / mysite / settings.py
As configurações do seu banco de dados devem ter um bloco TEST adicional, como mostrado em projectname_test .
2. Digite o comando abaixo usando o prompt de comando mysql ou o mysql workbench para conceder todos os privilégios ao usuário especificado em settings.py
Agora você pode correr
python manage.py test polls
.fonte
Se você está usando o
docker-compose
que funcionou para mim, foi o seguinte:ou
Minhas configurações são assim:
e minha
docker-compose.yml
aparência da seguinte maneira:fonte
No meu caso, as soluções GRANT PRIVILEGES não funcionaram com Python 3.7.2 , Django 2.1.7 e MySQL 5.6.23 ... Não sei por que.
Então, eu decidi usar o SQLite como um banco de dados de teste ...
Depois disso, o carro TESTES roda sem problemas:
fonte
Uau, então, combinar todas as respostas aqui com um pouco de ajuste finalmente me levou a uma solução de trabalho para docker-composite, django e postgres ...
Primeiro, o comando postgres dado por noufal valapra não está correto (ou talvez não seja atual), deve ser:
No caso de uma configuração de docker-compose, isso irá para o arquivo init.sql, é assim que o meu se parece:
Em seguida, o Dockerfile para postgres fica assim:
Então o Django settings.py tem esta entrada:
e a janela de encaixe-composição fica assim:
versão: '3.6'
Serviços:
fonte
Talvez você faça seu teste no modo suspenso ou como um trabalho em segundo plano. Tente com o
fg
comando no bash shell.fonte
Uma conta de superusuário é a maneira mais fácil de garantir testes fáceis. então, uma maneira mais simples de tornar o
django
usuário su é fazerALTER django WITH SUPERUSER
.para obter mais informações https://www.postgresql.org/docs/current/sql-alteruser.html
fonte