Как переключать базы данных в Django?

В файле settings.pyDjango есть словарь DATABASES, который хранит информацию о конфигурации для любого количества бэкендов баз данных:

# settings.py
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    },
    'test': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'testing',
        'USER': 'bert',
        'PASSWORD': '***',
        'HOST': 'remotemysql.com',
        'PORT': '3306',
    },
    'dev': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'development',
        'USER': 'ernie',
        'PASSWORD': '***',
        'HOST': 'remotemysql.com',
        'PORT': '3306',
    },
    ...
}

Я ожидал, что авторы Django включат метод для легкого переключения между этими опциями конфигурации, например, отдельную переменную где-нибудь

USE_THIS_DB = 'test';

для того, чтобы легко переключаться между базами данных тестирования, разработки, производства и т.д.

Я не могу найти эту опцию. Единственная информация о переключении баз данных, которую я могу найти, заключается в ручном переименовании различных опций конфигурации в DATABASES так, чтобы та, которую я хочу использовать, называлась default, что кажется излишне громоздким, подверженным ошибкам и непортативным.

Существует ли способ более элегантного переключения Django между различными базами данных при запуске?

Почему бы не сделать DIY на Python?

# settings.py
DATABASES = {
    'test': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'testing',
        'USER': 'bert',
        'PASSWORD': '***',
        'HOST': 'remotemysql.com',
        'PORT': '3306',
    },
    'dev': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'development',
        'USER': 'ernie',
        'PASSWORD': '***',
        'HOST': 'remotemysql.com',
        'PORT': '3306',
    },
    'sqlite': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    },
}

USE_THIS_DB = 'test'

DATABASES['default'] = DATABASES[USE_THIS_DB]

Вернуться на верх