Django-使用不同的数据库时-我应该使用“ using”还是“ db_manager”?

时间:2019-02-26 13:42:32

标签: django django-models django-orm

要选择一个特定的数据库,您可以编写:

composet install

或:

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

两者似乎都可以正常工作。那么两者有什么区别?

编辑

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

1 个答案:

答案 0 :(得分:2)

这取决于您的情况。如果您不使用任何manager method,则可以使用using(),否则将需要db_manager()

  

您可以在QuerySet“链”中的任何位置选择QuerySet的数据库。只需在using()上调用QuerySet即可获得另一个{{1} },使用指定的数据库。

但是,如果您需要使用管理器方法,则将无法使用。

以下说明摘自docs

假设您有一个接触数据库的自定义管理器方法– 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(...) 返回绑定到您指定数据库的管理器的副本。