Django - при использовании разных баз данных - я должен использовать "using" или "db_manager"? - PullRequest
0 голосов
/ 26 февраля 2019

Чтобы выбрать конкретную базу данных, вы пишете:

Object.objects.using('other_db')...

или:

Object.objects.db_manager('other_db')...

Кажется, что оба работают отлично.Так в чем же разница?будет охватывать все случаи для оператора using ('other_db') '?

1 Ответ

0 голосов
/ 26 февраля 2019

Это зависит от вашей ситуации.Если вы не используете метод менеджера , тогда using() хорошо, в противном случае вам понадобится db_manager().

. Вы можете выбрать базу данных для QuerySet влюбой точке в цепочке QuerySet. Просто вызовите using() на QuerySet, чтобы получить другую QuerySet, которая использует указанную базу данных.

Но если вам нужно использовать методы менеджера, Это не будет работать.

Следующее объяснение взято из документов :

Допустим, у вас есть собственный метод менеджера, который касается базы данных - User.objects.create_user().Поскольку create_user() - это метод менеджера, а не QuerySet, вы не можете сделать User.objects.using('another_db').create_user(). Метод create_user() доступен только для User.objects, менеджер, но не для QuerySet объектов, полученных из менеджера. Решение состоит в том, чтобы использовать db_manager(), например:

User.objects.db_manager('another_db').create_user(...)

db_manager() возвращает копию менеджера, привязанного к указанной вами базе данных.

...