无法查看具有多个数据库格局的SQL查询

时间:2019-02-12 06:18:36

标签: django django-queryset multiple-databases

Django 2.1.7,MySQL。数据库配置就像:

DATABASES = {
    'default': {},
    'auth_db': {
        'ENGINE': 'django.db.backends.mysql', 
        'NAME': 'auth',
        ...
    },
    'db1': {
        'ENGINE': 'django.db.backends.mysql', 
        'NAME': 'db1',
        ...
    },
    'db2': {
        'ENGINE': 'django.db.backends.mysql', 
        'NAME': 'd2',
        ...
    }
}

我在查看原始SQL查询时遇到各种问题:

1)无法打印特定查询对象的查询:

qs = Model.objects.using("db2").filter(...)
print(qs.query)

此代码删除了ImproperlyConfigured,因为它不遵守.using("db2"),并且为什么要检查默认数据库为空(如Django文档中所述,清空default_db很好)

2)在运行时,我打开一个外壳来监视查询:

from django.db import connections
print(connections["db1"].queries)

我只看到这个:

[{'sql': 'None', 'time': '0.001'},
 {'sql': 'None', 'time': '0.000'},
 {'sql': 'None', 'time': '0.008'}]

debug=True的设置如文档中所述。

任何人都有处理多个数据库的这类问题吗?

编辑: 我的数据库路由器配置如文档所述。在运行时中一切都很好,但是出于调试目的,我当然需要一个外壳程序来手动测试不同数据库中的查询集。

1 个答案:

答案 0 :(得分:0)

  

DATABASES设置必须配置默认数据库;任何数量的   还可以指定其他数据库。

我从database doc找到了这个。因此,您不能将default设置为空。因此,您必须通过插入虚拟数据来设置默认值。

如果您解决了第一个问题,但第二个问题仍然存在,请告诉我。

编辑:

  

如果默认数据库的概念在上下文中没有意义   项目中,您需要始终指定数据库   您要使用的。 Django要求默认数据库条目为   定义,但是如果参数字典可以留空   不被使用。为此,您必须为所有以下项设置DATABASE_ROUTERS   您应用程式的模型,包括任何contrib和第三方应用程式中的模型   您正在使用,因此不会将任何查询路由到默认数据库。   以下是一个示例settings.py片段,定义了两个   非默认数据库,有意保留默认条目   空:

来自this doc。 因此,您需要配置DATABASE_ROUTERS