Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 指定要在Django中使用的数据库_Python_Django_Multiple Databases_Django Settings - Fatal编程技术网

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

Python 指定要在Django中使用的数据库,python,django,multiple-databases,django-settings,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.

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


因此,我想我的实际问题是,如何指定用于查询的数据库

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

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

与第二个示例一样,未配置默认数据库

DATABASES = {
     'default':{},
...
}
当您在未指定数据库的情况下访问数据时,会使用
django.db.backends.dummy
后端,这会导致您的配置出现
配置不当
错误

使用数据库路由器配置多个数据库使用的示例如下

更新


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

django docs为多个数据库提供的第二个示例将其留空:当syncdb--databases=mydb2时,我可以指定要更新的数据库,但如何在访问数据时指定数据库?它是在model.py中完成的吗?@zyenge查看我答案中指向文档的最后一个链接,这不能在model中完成,它是通过
数据库路由器
设置完成的。因此,无论是否为读/写定制数据库路由器,当存在多个数据库时,必须使用
数据库路由器
?这是我最初的问题…@zyenge抱歉,我不明白
的意思,所以无论是否为读/写定制db\u,当有多个数据库时必须使用数据库路径?
并查看未定义的站点更新。