要选择一个特定的数据库,您可以编写:
composet install
或:
Object.objects.using('other_db')...
两者似乎都可以正常工作。那么两者有什么区别?
编辑
我的意思是-我是否应该始终使用' db_manager('other_db')'来覆盖' using('other_db')'语句的所有情况?
答案 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(...)
返回绑定到您指定数据库的管理器的副本。