Я использую 2 разные базы данных в моем проекте Django:
1) «default» - это PostgreSQL 2) «analysis» - база данных SQL Azure
Я также использую Django-Арендаторы разрешают многопользовательский подход.
Теперь вторая база данных должна иметь только специальные аналитические таблицы базы данных, тогда как основное приложение работает на первой базе данных.
settings.py:
DATABASES = {
'default': {
'ENGINE': 'tenant_schemas.postgresql_backend',
'NAME': 'xxx',
'USER': 'xxx',
'PASSWORD': 'xxx',
'HOST': 'localhost',
'PORT': '',
},
'analysis': {
'ENGINE': 'sql_server.pyodbc',
'NAME': 'xxx',
'USER': 'xxx',
'PASSWORD': 'xxx',
'HOST': 'xxx',
'PORT': 'xxx',
'OPTIONS': {
'driver': 'ODBC Driver 17 for SQL Server',
'MARS_Connection': 'True',
}
}
}
DATABASE_ROUTERS = (
'apps.power_bi.routers.AnalysisRouter',
'tenant_schemas.routers.TenantSyncRouter',
)
Поскольку аналитические функции доступны в конкретном приложении Django, я настроил следующий маршрутизатор:
class AnalysisRouter:
def db_for_read(self, model, **hints):
if model._meta.app_label == 'analysis':
return 'analysis'
return None
def db_for_write(self, model, **hints):
if model._meta.app_label == 'analysis':
return 'analysis'
return None
def allow_migrate(self, db, app_label, model_name=None, **hints):
if app_label == 'analysis':
return db == 'analysis'
return None
Я ожидаю, чтово время команды migrate schema
приложение analysis
синхронизируется со второй базой данных analysis
, вместо этого все приложения будут создавать таблицы в соответствии с определениями своих моделей.
Что мне здесь не хватает?