Я делаю это с DRF и Django. Использовать маршрутизатор базы данных
Это мой маршрутизатор, в котором каждый набор моделей для другой базы данных идет в отдельный файл.
class DatabaseRouter(object):
def module_switch(self,model):
result = 'default'
if model.__module__.endswith('foo_db1_models'): result = 'foo'
if model.__module__.endswith('bar_db2_models'): result = 'bar'
if model.__module__.endswith('baz_models'): result = 'baz'
if model.__module__.endswith('grid_models'): result = 'grid'
#print 'here', model.__module__, result, model.__class__.__name__
return result
def db_for_read(self, model, **hints):
return self.module_switch(model)
def db_for_write(self, model, **hints):
return self.module_switch(model)
def allow_relation(self, obj1, obj2, **hints):
"""
Relations between objects are allowed if both objects are
in the master/slave pool.
"""
# db_list = ('master', 'slave1', 'slave2')
# if obj1._state.db in db_list and obj2._state.db in db_list:
# return True
return None
def allow_migrate(self, db, app_label, model_name, **hints):
"""
All non-auth models end up in this pool.
"""
return True
Внутри файла settings.py,Вы указываете маршрутизатор:
DATABASE_ROUTERS = ['my_proj_foo.db_router.DatabaseRouter']
и другие базы данных:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'db'
'USER': 'foo',
'PASSWORD': 'bar',
'HOST': 'db.example.com',
'PORT': '3306'
},
'bar': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'bar'
'USER': 'foo',
'PASSWORD': 'bar',
'HOST': 'bar.example.com',
'PORT': '3306'
},
'baz': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'baz',
'USER': 'foo',
'PASSWORD': 'bar',
'HOST': 'baz.example.com',
'PORT': '5432'
},
},