'objects.using(...)'是否意味着我不需要数据路由器?

时间:2015-03-05 15:51:15

标签: python django django-models multi-database

我一直在试图弄清楚如何自动处理来自动态创建的数据库(MySql)的迁移和查询。我有一个动态路由器,我可以通过名称将路由前缀到数据库以执行查询。但后来我找到了objects.using('db_name')

using(...)功能是否不需要路由器?或using(...)提供路由器以下方法评估的信息,特别是model._meta.app_label

def db_for_read(self, model, **hints):
    """
    """
    if model._meta.app_label == 'db_name':
        return 'db_name'
    return None

def db_for_write(self, model, **hints):
    """
    """
    if model._meta.app_label == 'db_name':
        return 'db_name'
    return None

1 个答案:

答案 0 :(得分:0)

using是一种直接覆盖用于查询的数据库的方法。它无法更改用于您无法控制的查询的数据库,例如由第三方应用制作的数据库。

路由器根据模型和可能的其他提示指定用于操作的默认数据库。它不允许为单个查询更改数据库,但它允许更改查询使用的数据库。

因此,using既不需要路由器,也不提供路由器使用的信息,但它会根据具体情况覆盖路由器。