当我尝试用命令测试任何应用程序时(我注意到当我尝试使用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.
    }
}

当前回答

当Django运行测试套件时,它会创建一个新的数据库,在你的例子中是test_finance。以django为用户名的postgres用户没有创建数据库的权限,因此出现了错误信息。

当你运行migrate或syncdb时,Django不会尝试创建金融数据库,所以你不会得到任何错误。

你可以以超级用户的身份在postgres shell中运行以下命令,为django用户添加createdb权限。

=> ALTER USER django CREATEDB;

注意:ALTER USER中使用的用户名<username> CREATEDB;命令需要匹配Django设置文件中的数据库用户。在这种情况下,最初的海报,有用户django上面的答案。

其他回答

如果你正在使用docker-compose,对我来说是这样的:

ALTER ROLE username CREATEDB;
GRANT ALL PRIVILEGES ON test_database_name.* TO 'username';

or

ALTER ROLE username CREATEDB;
GRANT ALL PRIVILEGES ON *.* TO 'username'@'%';

我的设置是这样的:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'database_name',
        'USER': 'username',
        'PASSWORD': 'password',
        'HOST': 'db',
        'PORT': '3306',
    }
}

还有我的码头作曲。Yml的外观如下:

version: '3'
services:
  web:
      build: .
      command: './wait_for_db_and_start_server.sh'
      env_file: env_web
      working_dir: /project_name
      links:
        - db
      volumes:
        - .:/volume_name
      ports:
        - "8000:8000"
      depends_on:
        - db
  db:
    image: mysql:5.7
    restart: always
    env_file: env_db
    working_dir: /db
    volumes:
      - ./Dump.sql:/db/Dump.sql
    ports:
      - "3306:3306"

对于Postgres,用户必须具有createdb权限。

ALTER ROLE miriam CREATEDB;

请参阅此文档:https://docs.djangoproject.com/en/2.0/topics/testing/overview/#the-test-database

也许您将测试设置为暂停模式或作为后台工作。尝试使用bash shell中的fg命令。

超级用户帐户是保证测试顺利进行的最简单方法。因此,创建django用户su的一个更简单的方法是执行ALTER django WITH SUPERUSER。

更多信息https://www.postgresql.org/docs/current/sql-alteruser.html

我也面临着同样的问题

皮测试

我修改了django的用户权限,这样它就可以在运行python测试用例时创建一个测试数据库。

修改用户名