0

我一直在试图弄清楚如何自动处理来自动态创建的数据库(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
4

1 回答 1

0

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

路由器根据模型和可能的附加提示指定用于操作的默认数据库。它不允许更改单个查询的数据库,但它允许更改您无法控制的查询使用的数据库。

因此,using既不消除对路由器的需求,也不提供路由器使用的信息,而是根据具体情况覆盖路由器。

于 2015-03-05T16:35:15.600 回答