Я имею в виду, вы, очевидно, придется сделать некоторые изменения конфигурации.
В целом, установите наиболее часто используемую базу данных по умолчанию, а другую - как что-то еще - это адаптировано из одного из моих списков db с производственного сайта.
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'databasename',
'USER': 'mydefaultuser',
'PASSWORD': 'novelpassword',
'HOST':'first-host.com',
'PORT':'3306'
},
'auth': {
'ENGINE': 'sqlserver_pymssql',
'HOST': 'myserver.com',
'NAME': 'myauthdatabase',
'PASSWORD': 'passwordhere',
'PORT': 1433,
'USER': 'username'
}}
Затем вы можете использовать й eother базы данных в явном виде в своих взглядах, используя using
: User.objects.using('auth').all()
... или предпочтительно, вы можете установить его более широко используя Database Router:
class AuthRouter(object):
"""
A router to control all database operations on models in the
auth application.
"""
def db_for_read(self, model, **hints):
"""
Attempts to read auth models go to auth_db.
"""
if model._meta.app_label == 'auth':
return 'auth_db'
return None
def db_for_write(self, model, **hints):
"""
Attempts to write auth models go to auth_db.
"""
if model._meta.app_label == 'auth':
return 'auth_db'
return None
def allow_relation(self, obj1, obj2, **hints):
"""
Allow relations if a model in the auth app is involved.
"""
if obj1._meta.app_label == 'auth' or \
obj2._meta.app_label == 'auth':
return True
return None
def allow_migrate(self, db, app_label, model_name=None, **hints):
"""
Make sure the auth app only appears in the 'auth_db'
database.
"""
if app_label == 'auth':
return db == 'auth_db'
return None
Добавление DATABASE_ROUTERS = ['path.to.AuthRouter', 'path.to.PrimaryReplicaRouter']
в ваш файл настроек - это только примеры, взятые из документов по ссылкам выше, но это относительно просто.
Я бы сказать, что если у вас есть супер ясная и сжатая причина почему вы хотите сделать это, не делайте этого. Вы можете обрабатывать все это в одной базе данных, и как только вы пройдете маршрут множественной базы данных, вы сразу же получите cross-database limitations - всегда стоит иметь в виду.
Спасибо за помощь !!! Но можете ли вы объяснить мне больше о маршрутах базы данных? –
Что вам нужно объяснить? Работоспособный пример - буквально в ответе и в документах. «Можете ли вы объяснить больше» [это плохой вопрос] (http://stackoverflow.com/help/how-to-ask) - что конкретно вам нужно? Кроме того, если документы для этого не ясны для вас, я действительно рекомендую не следовать этому подходу! – Withnail
Концепция маршрутизаторов баз данных. Можете ли вы объяснить это? Как, где он должен оставаться? Являются ли маршрутизаторы конкретными для приложений или для баз данных ??? Где я должен хранить свои маршрутизаторы и некоторые рабочие примеры, возможно, –