Django: несколько баз данных, использующих DATABASE_ROUTERS - PullRequest
0 голосов
/ 22 октября 2018

Я использую 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, вместо этого все приложения будут создавать таблицы в соответствии с определениями своих моделей.

Что мне здесь не хватает?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...