Пользовательская база данных Django

Я использую 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 не работает: (параметр -settings, кажется, устарел, в 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

Ответ 1

Я обнаружил, что правильная команда для вызова в Django 1.4:

django-admin.py runserver --settings=myproject.settings_tests

Где эта информация находится в Django DOCS?

Спасибо за ваш ответ

Griffosx

Ответ 2

Более чистым и более масштабируемым способом переключения конфигураций, чем создавать несколько файлов конфигурации, будет использование переменных среды (см. # 3 методологии двенадцатифакторного приложения, используемой Heroku и другими). Например:

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.


Изменить: Чтобы облегчить этот процесс, Кеннет Рейц написал небольшое небольшое приложение под названием dj-database-url.

Ответ 3

Создайте settings_tests.py со следующими параметрами:

from settings import *

DATABASES = {
    'default': {
        'NAME': 'tests.db',
        'ENGINE': 'django.db.backends.sqlite3'
    },

}

Выполнить django-admin.py runserver --settings=settings_tests

Ответ 4

@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]
}