Kiedy próbuję przetestować dowolną aplikację za pomocą polecenia (zauważyłem to, gdy próbowałem wdrożyć mój projekt za pomocą tkaniny, która używa tego polecenia):
python manage.py test appname
Otrzymuję ten błąd:
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
polecenie wydaje się działać. Moje ustawienia bazy danych w 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.
}
}
źródło
GRANT ALL PRIVILEGES ON test_my_db.* TO 'my_user'@'localhost';
Znalazłem interesujące rozwiązanie twojego problemu.
W rzeczywistości dla MySQL możesz nadać uprawnienia do nieistniejącej bazy danych.
Możesz więc dodać nazwę „test_finance” do swojej testowej bazy danych w ustawieniach:
uruchom powłokę MySQL jako użytkownik root:
a teraz przyznaj wszystkie uprawnienia do tej nieistniejącej bazy danych w MySQL:
Teraz Django rozpocznie testy bez żadnych problemów.
źródło
W przypadku Postgres użytkownik musi mieć
createdb
pozwolenie.Zobacz tę dokumentację: https://docs.djangoproject.com/en/2.0/topics/testing/overview/#the-test-database
źródło
Jeśli bazą danych jest mysql, te dwie zmiany załatwią sprawę.
1. Otwórz mysite / mysite / settings.py
Twoje ustawienia bazy danych powinny mieć dodatkowy blok TEST, jak pokazano w projekcie nazwa_testu .
2.Wpisz poniższe polecenie za pomocą wiersza poleceń mysql lub środowiska roboczego mysql, aby nadać wszystkie uprawnienia użytkownikowi określonym w settings.py
Teraz możesz biec
python manage.py test polls
.źródło
W moim przypadku rozwiązania GRANT PRIVILEGES nie działały z Pythonem 3.7.2 , Django 2.1.7 i MySQL 5.6.23 ... Nie wiem dlaczego.
Postanowiłem więc użyć SQLite jako bazy danych TEST ...
Po tym samochód TESTY działa bez problemów:
źródło
Jeśli używasz
docker-compose
tego, co zadziałało dla mnie, było następujące:lub
Moje ustawienia wyglądają tak:
a mój
docker-compose.yml
wygląd wygląda następująco:źródło
Wow, więc połączenie wszystkich odpowiedzi tutaj z drobnymi poprawkami w końcu doprowadziło mnie do działającego rozwiązania dla docker-compose, django i postgres ...
Najpierw polecenie postgres podane przez noufal valapra jest niepoprawne (lub może po prostu nieaktualne), powinno być:
W przypadku konfiguracji docker-compose, zostanie to umieszczone w pliku init.sql, tak wygląda moja:
Następnie plik Dockerfile dla postgres wygląda następująco:
Następnie Django settings.py zawiera ten wpis:
a docker-compose wygląda następująco:
wersja: '3.6'
usługi:
źródło
Może umieścisz swój test w trybie zawieszonym lub jako praca w tle. Spróbuj za pomocą
fg
polecenia w powłoce bash.źródło
Konto superużytkownika to najłatwiejszy sposób na zapewnienie płynnego testowania. więc prostszym sposobem utworzenia
django
użytkownika su jest zrobienie tegoALTER django WITH SUPERUSER
.aby uzyskać więcej informacji https://www.postgresql.org/docs/current/sql-alteruser.html
źródło