web-dev-qa-db-ja.com

指定Django settings.pyでデータベース名をテストする

pythonオブジェクトを使用してデータベースを指定しています:

DATABASES = {
 'default':{
   'ENGINE':'mysql',
   'NAME':'testsqldb',
   'USER':'<username>',
   'PASSWORD':'<password>',
 },
 'dynamic_data':{
   'ENGINE': 'sqlite3',
   'NAME':'',
   'USER':'',
   'PASSWORD':''
 },
}

テストデータベースの名前を指定するにはどうすればよいですか? settings.pyファイルでTEST_NAME = 'auto_tests'を使用しようとしています。ただし、python manage.py tests <app_name>を実行すると、次のメッセージが表示されます。

Creating test database 'default'...
Got an error creating the test database: (1007, "Can't create database 'test_testsqldb'; database exists")
Type 'yes' if you would like to try deleting the test database 'test_testsqldb', or 'no' to cancel:

テストの実行時に、おそらく「auto_tests_testsqldb」と呼ばれる別のデータベースがシステムによって作成されることを期待しています。ただし、それでもtest_testsqldbについて質問されます。

どんなアドバイスも大歓迎です!

30

Django 1.6以下では、TEST_NAMEは、データベース辞書の1つのキーである必要があります。ただし、Django 1.7以降では、テストデータベースの設定の辞書であるTESTキーを使用します。

あなたはおそらく欲しいです:

DATABASES = {
 'default':{
   'ENGINE':'mysql',
   'NAME':'testsqldb',
   'USER':'<username>',
   'PASSWORD':'<password>',
   'TEST': {
       'NAME': 'auto_tests',
   }
 },
 'dynamic_data':{
   'ENGINE': 'sqlite3',
   'NAME':'',
   'USER':'',
   'PASSWORD':''
 },
}

あるいは、テストに別のエンジンを使用したい場合がありますか?その場合は、テスト用に別の設定ファイルを作成するだけでよいと思います。標準設定モジュールからインポートして、DATABASESをオーバーライドできます。

34
SmileyChris