Как настроить несколько схем в Django с Oracle в качестве базы данных? - PullRequest
0 голосов
/ 12 июля 2019

Мое рабочее место планирует использовать Python / Django в качестве базового фреймворка и React на передней панели, поверх oracle db из ASP classic.Так как наша база данных oracle структурирована с самого начала компании, мы решили оставить ее как есть.

Насколько я понимаю, схемы в oracle обычно доступны по имени пользователя / паролю, поэтому для каждого пользователя должен быть свой пароль / пароль.у схемы есть доступ, и у нашей базы данных oracle есть около 30 схем, каждая из которых содержит множество таблиц.

С другой стороны, Django, похоже, поддерживает только одну схему за раз, в зависимости от установленного приложения.в файле settings.py, который звучит так, как будто в конфигурации базы данных должны быть разные имя пользователя / пароль, заданные в файле settings.py для каждого установленного приложения.

До сих пор я пробовал class Meta и DATABASES вsettings.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 установлено только одно приложение?

PS Исправьте меня в любых недопониманиях, которые яиметь выше.

1 Ответ

2 голосов
/ 12 июля 2019

Вы можете иметь несколько схем в 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...