我需要为我的django项目使用多个数据库。当只有一个数据库时,应用程序正常工作:
在setting.py
中DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'mydb',
'USER': 'root',
'PASSWORD': '',
'HOST': '127.0.0.1',
'PORT': 3306,
},
但是如果我从同一个引擎添加更多数据库:
DATABASES = {
'default':{},
'mydb1': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'mydb1',
'USER': 'root',
'PASSWORD': '',
'HOST': '127.0.0.1',
'PORT': 3306,
},
'mydb2': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'mydb2',
'USER': 'root',
'PASSWORD': '',
'HOST': '127.0.0.1',
'PORT': 3306,
}
}
它给了我以下错误:
ImproperlyConfigured: settings.DATABASES is improperly configured. Please supply the ENGINE value. Check settings documentation for more details.
另外,我试过了:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'mydb1',
'USER': 'root',
'PASSWORD': '',
'HOST': '127.0.0.1',
'PORT': 3306,
},
'mydb2': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'mydb2',
'USER': 'root',
'PASSWORD': '',
'HOST': '127.0.0.1',
'PORT': 3306,
}
}
它只看到mydb1,而不是mydb2,当我尝试查询mydb2时,它给了我:
DoesNotExist: Site matching query does not exist.
我是否需要定义数据库路由?似乎我只需要为自定义读/写操作。
谢谢
在django docs中,它说“默认路由方案确保如果未指定数据库,则所有查询都会回退到默认数据库”。
所以我想我的实际问题是如何指定用于查询的数据库?
答案 0 :(得分:1)
DATABASES设置必须配置默认数据库;任何数量的 还可以指定其他数据库。
如果默认数据库的概念在上下文中没有意义 在项目中,您需要注意始终指定数据库 你想用的。
在第二个示例中,未配置默认数据库
DATABASES = {
'default':{},
...
}
当您在未指定数据库的情况下访问数据时,会使用django.db.backends.dummy
后端,这会在您的配置中抱怨ImproperlyConfigured
错误。
使用数据库路由器配置多个数据库使用的示例可以是found in docs
<强>更新强>
网站匹配查询错误的原因完全不同,这是另一个问题。在这里回答,因为它与许多其他人重复:由于您的mysql1
和mysql2
dbs具有不同的内容,第二个似乎没有正确配置。请参阅site matching query does not exist。