Если вы хотите, чтобы все запросы в приложении email_lists запрашивали реплику для чтения, то маршрутизатор - это путь к go. Если вам нужно запрашивать разные базы данных в одном и том же приложении, то решение @ ibaguio - это способ go. Вот базовый c пример маршрутизатора, аналогичный тому, который я использую:
project / database_routers.py
MAP = {'some_app': 'default',
'some_other_app': 'default',
'email_lists': 'read-replica',}
class DatabaseRouter:
def db_for_read(self, model, **hints):
return MAP.get(model._meta.app_label, None)
def db_for_write(self, model, **hints):
return MAP.get(model._meta.app_label, None)
def allow_relation(self, object_1, object_2, **hints):
database_object_1 = MAP.get(object_1._meta.app_label)
database_object_2 = MAP.get(object_2._meta.app_label)
return database_object_1 == database_object_2
def allow_migrate(self, db, app_label, model=None, **hints):
return MAP.get(app_label, None)
In settings.py:
DATABASE_ROUTERS = ['project.database_router.DatabaseRouter',]
Похоже, вы хотите, чтобы он был только в производстве, поэтому я думаю, вы можете добавить его условно:
if ENV == 'production':
DATABASE_ROUTERS = ['project.database_router.DatabaseRouter',]