指定要在Django中使用的数据库

时间:2013-11-13 21:33:13

标签: python django multiple-databases django-settings

我需要为我的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中,它说“默认路由方案确保如果未指定数据库,则所有查询都会回退到默认数据库”。

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

1 个答案:

答案 0 :(得分:1)

docs

中详细说明了这一点
  

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

     

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

在第二个示例中,未配置默认数据库

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

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

使用数据库路由器配置多个数据库使用的示例可以是found in docs

<强>更新

网站匹配查询错误的原因完全不同,这是另一个问题。在这里回答,因为它与许多其他人重复:由于您的mysql1mysql2 dbs具有不同的内容,第二个似乎没有正确配置。请参阅site matching query does not exist