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
的设置如文档中所述。
任何人都有处理多个数据库的这类问题吗?
编辑: 我的数据库路由器配置如文档所述。在运行时中一切都很好,但是出于调试目的,我当然需要一个外壳程序来手动测试不同数据库中的查询集。
答案 0 :(得分:0)
DATABASES设置必须配置默认数据库;任何数量的 还可以指定其他数据库。
我从database doc找到了这个。因此,您不能将default
设置为空。因此,您必须通过插入虚拟数据来设置默认值。
如果您解决了第一个问题,但第二个问题仍然存在,请告诉我。
编辑:
如果默认数据库的概念在上下文中没有意义 项目中,您需要始终指定数据库 您要使用的。 Django要求默认数据库条目为 定义,但是如果参数字典可以留空 不被使用。为此,您必须为所有以下项设置DATABASE_ROUTERS 您应用程式的模型,包括任何contrib和第三方应用程式中的模型 您正在使用,因此不会将任何查询路由到默认数据库。 以下是一个示例settings.py片段,定义了两个 非默认数据库,有意保留默认条目 空:
来自this doc。 因此,您需要配置DATABASE_ROUTERS。