我正在使用Django 1.4
我需要启动开发服务器,并且我想指定(在命令中)它必须使用的数据库。例如,如果我的设置包含:
DATABASES = {
'default': {
'NAME': 'db.db',
'ENGINE': 'django.db.backends.sqlite3'
},
'tests': {
'NAME': 'tests.db',
'ENGINE': 'django.db.backends.sqlite3'
},
}
我想使用类似的东西:
django-admin.py runserver --database=tests
有类似的东西吗?我也尝试使用第二个设置文件,但是--settings选项不起作用:( - {tints选项似乎已被弃用,DOCS根本没有提及)
django-admin.py runserver --settings=settings_tests
或
django-admin.py runserver --settings settings_tests
引发错误:
ImportError: Could not import settings 'settings_tests' (Is it on sys.path?): No module named settings_tests
非常感谢任何帮助, 感谢,
Griffosx
答案 0 :(得分:19)
切换配置比创建多个配置文件更清晰,更具扩展性的方法是使用环境变量(参见Heroku和其他人使用的#3 of the twelve-factor app methodology)。例如:
from os import environ
DATABASES = {
'main': {
'NAME': 'db.db',
'ENGINE': 'django.db.backends.sqlite3'
},
'tests': {
'NAME': 'tests.db',
'ENGINE': 'django.db.backends.sqlite3'
},
}
default_database = environ.get('DJANGO_DATABASE', 'main')
DATABASES['default'] = DATABASES[default_database]
然后,您可以通过设置DJANGO_DATABASE
环境变量来更改默认数据库。
export DJANGO_DATABASE='tests'
./manage.py runserver
...或...
DJANGO_DATABASE='tests' ./manage.py runserver
您还可以使用Python代码设置环境变量。
编辑:为了简化这个过程,Kenneth Reitz编写了一个名为dj-database-url的小应用程序。
答案 1 :(得分:10)
我发现在Django 1.4中调用的正确命令是:
django-admin.py runserver --settings=myproject.settings_tests
Django DOCS中的这些信息在哪里?
感谢您的所有回复
Griffosx
答案 2 :(得分:3)
使用以下内容创建settings_tests.py
:
from settings import *
DATABASES = {
'default': {
'NAME': 'tests.db',
'ENGINE': 'django.db.backends.sqlite3'
},
}
执行django-admin.py runserver --settings=settings_tests
答案 3 :(得分:1)
@Danilo Barges提出了解决问题的简单方法。我只添加了一些更改来处理运行测试。这是因为DATABASES['default'] = DATABASES[default_database]
会在DATABASES
词典中添加一个条目。因此,如果您运行测试,测试运行器将针对'default'
和DATABASES
中的下一个条目运行。改为使用两个词典:
DATABASES_AVAILABLE = {
'default': {
'NAME': 'db.db',
'ENGINE': 'django.db.backends.sqlite3'
},
'tests': {
'NAME': 'tests.db',
'ENGINE': 'django.db.backends.sqlite3'
},
}
database = os.environ.get('DJANGO_DATABASE', 'main')
DATABASES = {
'default': DATABASES_AVAILABLE[database]
}