220

コマンドでアプリをテストしようとすると (このコマンドを使用するファブリックを使用して myproject をデプロイしようとしたときに気付きました):

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.
    }
}
4

12 に答える 12

439

Djangoがテストスイートを実行すると、あなたの場合は新しいデータベースが作成されますtest_finance。ユーザー名を持つpostgresユーザーにdjangoはデータベースを作成する権限がないため、エラーメッセージが表示されます。

migrateまたはを実行するとsyncdb、Djangoはfinanceデータベースを作成しようとしないため、エラーは発生しません。

postgresシェルでスーパーユーザーとして次のコマンドを実行することで、createdb権限をdjangoユーザーに追加できます(このスタックオーバーフローの回答のヒント)。

=> ALTER USER django CREATEDB;

注:コマンドで使用されるユーザー名ALTER USER <username> CREATEDB;は、Django設定ファイルのデータベースユーザーと一致する必要があります。この場合、元のポスターはdjango、上記の回答としてユーザーを持っていました。

于 2013-01-06T20:31:49.907 に答える
1

実行時のアクションを確認し、データベースを切り替えます

import sys
TESTING = sys.argv[1:2] == ['test']
if TESTING==False:
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.postgresql_psycopg2',
            'NAME': config('DB_NAME'),
            'USER': config('DB_USER'),
            'PASSWORD': config('DB_PASSWORD'),
            'HOST': config('DB_HOST'),
            'PORT': ''
             }       
           }
else:
    DATABASES = {    
        'default': {
        "ENGINE": "django.db.backends.sqlite3",
        "TEST": {
            "NAME": os.path.join(BASE_DIR, "test_db.sqlite3"),
        }
    }}
于 2021-03-05T07:09:53.823 に答える
0

テスト データベースを手動で作成することもできますが、test キーを settings.py に入れます。

次に、MIRROR キーに値「デフォルト」を入力して、デフォルト データベースの正確なレプリカまたは好きなデータベースをテストできるようにします。

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'finance',
        'USER': 'django',
        'TEST': {
             'MIRROR': 'default',
        },
        'PASSWORD': 'mydb123',
        'HOST': '127.0.0.1',
        'PORT': '',
    }
}

高度な django postgres docsを確認することもできます

于 2021-01-14T06:17:57.073 に答える