如何使用oracle作为数据库在Django中设置多个架构?

时间:2019-07-12 01:08:07

标签: python django database oracle schema

我的工作场所计划使用Python / Django作为后端框架,并在前端使用React,在ASP classic的oracle db之上。由于我们的oracle数据库是从公司成立之初就开始构建的,因此我们决定保持原样。

据我了解,oracle中的模式通常是通过用户名/密码访问的,因此每个模式都需要具有用户名/密码才能访问,并且我们的oracle数据库具有大约30种模式,每个模式内部都包含许多表。 另一方面,

Django似乎一次仅支持一个模式(基于settings.py中安装的应用程序),听起来数据库配置需要在settings.py中设置不同的用户/密码。对于已安装的每个应用。

到目前为止,我已经在class Meta中尝试过DATABASESsettings.py

    // class Meta
    class SomeModel(models.Model):
            ///some fields and data types...

            class Meta():
                    managed=False
                    db_table=u'"schema\".\"table"'

    // DATABASES
    DATABASES = {
          'default': {
                'ENGINE': 'django.db.backends.oracle',
                'NAME': 'multi_schema_db',
                'USER': 'django_user',
                'PASSWORD': 'secret',
          },

          'data': {
                'ENGINE': 'django.db.backends.oracle',
                'NAME': 'multi_schema_db',
                'USER': 'data_user',
                'PASSWORD': 'secret',
          },
    }

我的问题是,在django仅安装了一个应用程序的情况下,是否有任何变通办法可以访问多个架构?

P.S。纠正我在上面的任何误解。

1 个答案:

答案 0 :(得分:2)

You can have multiple schemas in Django

DATABASES = {
      'default': {
            'ENGINE': 'django.db.backends.oracle',
            'NAME': 'multi_schema_db_1',  # The name is the schema
            'USER': 'django_user',
            'PASSWORD': 'secret',
      },

      'data': {
            'ENGINE': 'django.db.backends.oracle',
            'NAME': 'multi_schema_db_2',  # The name is the schema
            'USER': 'data_user',
            'PASSWORD': 'secret',
      },
}

要使用特定的架构,请使用.using()

SomeModel.objects.using('data').all()  # The default is to use the "default" database conection

如果某些模型仅处于一种模式,则可以使用routers定义每种模型要使用的数据库

class YourRouter:

    def db_for_read(self, model, **hints):
        return database_for_the_model

    def db_for_write(self, model, **hints):
        return database_for_the_model