django - Django - 使用不同的数据库时 - 我应该使用“使用”还是“db_manager”?
问题描述
要选择您编写的特定数据库:
Object.objects.using('other_db')...
或者:
Object.objects.db_manager('other_db')...
两者似乎都工作得很好。那么两者有什么区别呢?
编辑
我的意思是 - 我是否应该始终使用 ' db_manager('other_db') '这将涵盖' using('other_db') '语句的所有情况?
解决方案
这取决于你的情况。如果您不使用任何管理器方法,那么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()
返回绑定到您指定的数据库的管理器的副本。
推荐阅读
- websocket - Safari 从响应中删除 Sec-WebSocket-Extensions 标头
- c# - 如何编写 ac# 控制台应用程序以将文本文件拆分为多个文件,其中行数由用户指定
- mysql - 如何从解压缩文件和 SQL 转储中恢复 WP 站点?
- join - 加入来自不同微服务的 CQRS 模式中的数据
- python-3.x - 多边形三角剖分算法
- wpf - WPF DataGrid 生成名称不正确的列
- php - PHP 排序多维数组 - array_multisort 给出错误
- python-3.x - 使用 XGboost 预测测试和训练时的特征名称不匹配
- excel - 在高级过滤器中包含一个计数器
- xml - 如何拆分串联的 XML 文档?