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

标签 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中有明确说明

The DATABASES setting must configure a default database; any number of additional databases may also be specified.

If the concept of a default database doesn’t make sense in the context of your project, you need to be careful to always specify the database that you want to use.

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

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

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

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

更新

站点匹配查询错误的原因完全不同,是另一个问题。在这里回答,因为它是许多其他人的重复:因为你的 mysql1mysql2 数据库有不同的内容,第二个似乎没有正确配置。引用site matching query does not exist .

关于python - 指定要在 Django 中使用的数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19964833/

相关文章:

Python > Uncompyle2 - 用法

python - 限制圣餐和lambda服务的返回项目

python - django unique() 和 order_by() extra() 一起使用

Hibernate 使用多个数据库

mysql - 使用事务轨在同一操作 Controller 中对多个数据库进行查询?

python - 使用 beautifulsoup 获取标签之间的内容

python - 如何在 python 中为子图运行智能循环

django - 我正在尝试使用 django-mptt 构建网站导航

python - Django 中的请求

c# - 开发和生产数据库