2

我需要为我的 django 项目使用多个数据库。当只有一个数据库时,应用程序可以正常工作:

在设置.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 文档中,它说“默认路由方案确保如果未指定数据库,所有查询都回退到默认数据库”。

所以我想我的实际问题是 如何指定用于查询的数据库?

4

1 回答 1

1

它在文档中明确说明

DATABASES 设置必须配置一个默认数据库;也可以指定任意数量的附加数据库。

如果默认数据库的概念在您的项目上下文中没有意义,则需要小心始终指定要使用的数据库。

如您的第二个示例默认数据库未配置

DATABASES = {
     'default':{},
...
}

当您在未指定数据库的情况下访问数据时,将django.db.backends.dummy使用后端,该后端会抱怨您的配置并ImproperlyConfigured出现错误。

可以在文档中找到使用数据库路由器配置多个数据库使用的示例

更新

站点匹配查询错误的原因完全不同,是另一个问题。在这里回答,因为它与许多其他内容重复:由于您mysql1mysql2dbs 的内容不同,第二个似乎没有正确配置。参考站点匹配查询不存在

于 2013-11-13T21:38:04.443 回答