Путаница в конфигурации нескольких баз данных - PullRequest
0 голосов
/ 12 апреля 2020

Я пытаюсь использовать несколько баз данных, где одна БД по умолчанию, а вторая БД: память БД. Из описания в Документах (показано ниже) кажется, что маршрутизация по умолчанию должна быть в порядке. Но это говорит о том, что объекты «привязаны» к своей исходной базе данных. Как существует «Оригинальная» база данных?

Когда я впервые начал реализовывать это, я ожидал, что в классах Model будет META, которая будет определять его базу данных, но, похоже, это не так. Я вижу примеры, когда у людей есть Отображение Приложений в БД, что было бы идеально для моего сценария, но потом они все равно оборачиваются и пишут Маршрутизацию.

Я не хочу всегда добавлять базу данных Сохранить звонки, так как это может привести к ошибкам программирования. Существуют ли официальные настройки для сопоставления приложения с базой данных или модели с базой данных? Или всегда требуется написать маршрутизатор для использования нескольких баз данных.

# Is DATABASE_APPS_MAPPING just a name that some developer chose to use or is it a
# real Django thing that would do what I want?
DATABASE_APPS_MAPPING = {'app1': 'default', 'app2': 'in_memory'}

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    },
    'in_memory': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': ':memory:',
    }
}

Do c Содержимое :

Самый простой способ использовать несколько Базы данных является настройка схемы маршрутизации базы данных. Схема маршрутизации по умолчанию гарантирует, что объекты остаются «привязанными» к своей исходной базе данных (т. Е. Объект, извлеченный из базы данных foo, будет сохранен в той же базе данных). Схема маршрутизации по умолчанию гарантирует, что если база данных не указана, все запросы возвращаются к базе данных по умолчанию.

1 Ответ

0 голосов
/ 13 апреля 2020

Да, вам нужно использовать маршрутизатор. Это механизм Django для определения, какую базу данных следует использовать для данной операции. Возможность указать это в коде гораздо более мощная и гибкая, чем простое сопоставление.

Если сопоставление может удовлетворить ваши потребности, вы можете реализовать эту функцию самостоятельно; или, возможно, уже есть стороннее приложение для этого. DATABASE_APPS_MAPPING не является настройкой Django, поэтому кто-то должен был написать маршрутизатор, чтобы использовать это значение.

...