Когда я пытаюсь протестировать любое приложение с помощью команды (я заметил это, когда попытался развернуть myproject с помощью Fabric, которая использует эту команду):
python manage.py test appname
Я получаю эту ошибку:
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
Команда, кажется, работает. Мои настройки базы данных в 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.
}
}
источник
GRANT ALL PRIVILEGES ON test_my_db.* TO 'my_user'@'localhost';
Я нашел интересное решение вашей проблемы.
Фактически для MySQL вы можете предоставить привилегии для несуществующей базы данных.
Таким образом, вы можете добавить имя 'test_finance' для вашей тестовой базы данных в ваших настройках:
запустить оболочку MySQL от имени пользователя root:
и теперь предоставьте все привилегии этой несуществующей базе данных в MySQL:
Теперь Django начнет тесты без проблем.
источник
В случае с Postgres пользователь должен иметь
createdb
разрешение.Смотрите эту документацию: https://docs.djangoproject.com/en/2.0/topics/testing/overview/#the-test-database
источник
Если база данных - mysql, тогда эти два изменения помогут.
1. Откройте mysite / mysite / settings.py
В настройках вашей базы данных должен быть дополнительный блок TEST, как показано в projectname_test .
2. Введите команду ниже, используя командную строку mysql или рабочую среду mysql, чтобы предоставить все привилегии пользователю, указанному в settings.py
Теперь вы можете бежать
python manage.py test polls
.источник
В моем случае решения GRANT PRIVILEGES не работали с Python 3.7.2 , Django 2.1.7 и MySQL 5.6.23 ... Я не знаю почему.
Поэтому я решил использовать SQLite в качестве базы данных TEST ...
После этого машина TESTS проедет без проблем:
источник
Если вы используете
docker-compose
то, что работает для меня, было следующее:или
Мои настройки выглядят так:
и
docker-compose.yml
выглядит так:источник
Ничего себе, комбинируя все ответы здесь с небольшой настройкой, наконец, я получил рабочее решение для docker-compose, django и postgres ...
Во-первых, команда postgres, заданная noufal valapra, неверна (или, возможно, просто не актуальна), она должна быть:
В случае установки docker-compose это будет идти в файле init.sql, вот как выглядит мой файл:
Тогда Dockerfile для postgres выглядит так:
Тогда в Django settings.py есть эта запись:
и docker-compose выглядит так:
версия: '3.6'
Сервисы:
источник
Может быть, вы поставили свой тест в режиме ожидания или в качестве фоновой работы. Попробуйте с
fg
командой в Bash Shell.источник
Аккаунт суперпользователя - это самый простой способ гарантировать беспроблемное тестирование. так что более простой способ сделать
django
пользователя su - это сделатьALTER django WITH SUPERUSER
.для получения дополнительной информации https://www.postgresql.org/docs/current/sql-alteruser.html
источник