首页 > 解决方案 > Django - 使用不同的数据库时 - 我应该使用“使用”还是“db_manager”?

问题描述

要选择您编写的特定数据库:

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

或者:

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

两者似乎都工作得很好。那么两者有什么区别呢?

编辑

我的意思是 - 我是否应该始终使用 ' db_manager('other_db') '这将涵盖' using('other_db') '语句的所有情况?

标签: djangodjango-modelsdjango-orm

解决方案


这取决于你的情况。如果您不使用任何管理器方法,那么using()很好,否则您将需要db_manager().

您可以在“链”QuerySet中的任何点为 a 选择数据库。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()返回绑定到您指定的数据库的管理器的副本。


推荐阅读