Как переключать базы данных в Django?
В файле settings.py
Django есть словарь 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]