Django:使用DATABASE_ROUTERS的多个数据库

时间:2018-10-21 23:38:32

标签: django multiple-databases

我在Django项目中使用2个不同的数据库:

1)'默认'是PostgreSQL 2)“分析”是Azure SQL数据库

我还使用Django-Tenants允许多租户方法。

现在,第二个数据库应该仅具有特殊的分析数据库表,而核心应用程序在第一个数据库上运行。

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同步,相反,所有应用程序都将根据其模型定义来创建表。

我在这里想念什么?

0 个答案:

没有答案