'objects.using(...)' 是否意味着我不需要数据路由器?
Does 'objects.using(...)' mean I don't need a data router?
我一直在努力弄清楚如何自动处理来自动态创建的数据库的迁移和查询 (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
using
是一种直接覆盖用于查询的数据库的方法。它无法更改用于不受您控制的查询的数据库,例如第三方应用程序生成的查询。
路由器根据模型和可能的其他提示指定用于操作的默认数据库。它不允许为单个查询更改数据库,但它允许更改您无法控制的查询所使用的数据库。
因此,using
既不会消除对路由器的需求,也不会提供路由器使用的信息,而是根据具体情况覆盖路由器。
我一直在努力弄清楚如何自动处理来自动态创建的数据库的迁移和查询 (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
using
是一种直接覆盖用于查询的数据库的方法。它无法更改用于不受您控制的查询的数据库,例如第三方应用程序生成的查询。
路由器根据模型和可能的其他提示指定用于操作的默认数据库。它不允许为单个查询更改数据库,但它允许更改您无法控制的查询所使用的数据库。
因此,using
既不会消除对路由器的需求,也不会提供路由器使用的信息,而是根据具体情况覆盖路由器。