Как мне получить курсор для маршрутизируемой базы данных?

#django

#django

Вопрос:

django.db.connection.cursor() возвращает соединение с базой данных по умолчанию, а не маршрутизируемую.

Как мне создать курсор для базы данных, выбранной для моего приложения Django конфигурацией проекта?

Ответ №1:

django.db предоставляет словарь всех подключений в соответствии с ключами, которые вы используете в своем словаре в модуле настроек:

 from django.db import connections
cursor = connections['my_db_alias'].cursor()
  

Это задокументировано здесь .

Комментарии:

1. Как вы получаете строку ‘my_db_alias’ (определенную при настройке проекта с помощью некоторой сложной процедуры маршрутизации) на уровне приложения?

Ответ №2:

Хорошо, я изучил django.db.models.Класс модели и обнаружил, что маршрутизируемое соединение, если оно получается через маршрутизатор каждый раз:

 from django.db import connections, router

using = using or router.db_for_write(self.__class__, instance=self)
connection = connections[using]
  

К сожалению, маршрутизатор принимает подкласс Model в качестве первого аргумента своего метода db_for_write() .