繁体   English   中英

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

[英]How to set up multiple schema in django with oracle as a database?

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

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

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

到目前为止,我已经在settings.py尝试了class MetaDATABASES class Meta

    // 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仅安装了一个应用程序的情况下,是否有任何变通办法可以访问多个架构?

PS请纠正我在上面的任何误解。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM