Django配置不同的数据库

Django配置不同的数据库,django,django-settings,django-database,django-mysql,Django,Django Settings,Django Database,Django Mysql,我有2个感兴趣的数据库,基本数据库和开发数据库: mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | projectsdb | | projectsdb_dev | +--------------------+ 3 rows in set (0.00 sec) 在我的django文件m

我有2个感兴趣的
数据库,基本数据库和开发数据库:

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| projectsdb         |
| projectsdb_dev     |
+--------------------+
3 rows in set (0.00 sec)
在我的django文件
mysite/mysite/settings.py
中,我的数据库是这样声明的:

DATABASES = {  
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'projectsdb',
        'USER': 'projectsdb',
        'PASSWORD': 'notsecure',
        'HOST': 'localhost',   # Or an IP Address that your DB is hosted on
        'PORT': '3306',
    }
}
DATABASES = { 
    'default': {}, 
    'prod': {
        'ENGINE': 'django.db.backends.mysql', 
        'NAME': 'projectsdb',
        'USER': 'projectsdb',
        'PASSWORD': 'notsecure',
        'HOST': 'localhost',   # Or an IP Address that your DB is hosted on
        'PORT': '3306',
    },  
    'dev': {
        'ENGINE': 'django.db.backends.mysql', 
        'NAME': 'projectsdb_dev',
        'USER': 'projectsdb',
        'PASSWORD': 'notsecure',
        'HOST': 'localhost',   # Or an IP Address that your DB is hosted on
        'PORT': '3306',
    }   
}
允许的主机是:

ALLOWED_HOSTS = ['xxx.xx.xxx.xx']  # I replaced it for the example
我在端口8006上启动服务器,用于开发:

$ python ./manage.py runserver xxx.xx.xxx.xx:8006
这里我修改了生产数据库。我可以切换到dev数据库,替换默认数据库名称:

DATABASES = {  
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'projectsdb_dev',
        'USER': 'projectsdb',
        'PASSWORD': 'notsecure',
        'HOST': 'localhost',   # Or an IP Address that your DB is hosted on
        'PORT': '3306',
    }
}
它工作正常,服务器正在与
projectsdb\u dev
数据库交互。但是,我希望在设置文件中保留这两个数据库的可用性,并且我看到了以这种方式进行设置的教程:

DATABASES = {  
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'projectsdb',
        'USER': 'projectsdb',
        'PASSWORD': 'notsecure',
        'HOST': 'localhost',   # Or an IP Address that your DB is hosted on
        'PORT': '3306',
    }
}
DATABASES = { 
    'default': {}, 
    'prod': {
        'ENGINE': 'django.db.backends.mysql', 
        'NAME': 'projectsdb',
        'USER': 'projectsdb',
        'PASSWORD': 'notsecure',
        'HOST': 'localhost',   # Or an IP Address that your DB is hosted on
        'PORT': '3306',
    },  
    'dev': {
        'ENGINE': 'django.db.backends.mysql', 
        'NAME': 'projectsdb_dev',
        'USER': 'projectsdb',
        'PASSWORD': 'notsecure',
        'HOST': 'localhost',   # Or an IP Address that your DB is hosted on
        'PORT': '3306',
    }   
}
现在,当我在xxx.xx.xxx.xx:8006上打开网页时,我得到以下错误:

ImproperlyConfigured at /admin/

settings.DATABASES is improperly configured. Please supply the ENGINE value. Check settings documentation for more details.
我不知道这是否相关,但我还有以下表格:

mysql> select * from django_site;
+----+--------------------+----------------+
| id | domain             | name           |
+----+--------------------+----------------+
|  1 | example.com        | example.com    |
|  2 | xxx.xx.xxx.xx:8000 | projectsdb     |
|  3 | xxx.xx.xxx.xx:8006 | projectsdb_dev |
+----+--------------------+----------------+
3 rows in set (0.00 sec)

如何运行指定所需正确数据库的服务器?

我想说的是,为
dev
prod
创建单独的设置文件。或者,对于数据库,您只能使用环境变量

$ export ENV=PROD
然后在
settings.py中

import os
if os.environ.get('ENV') == "PROD":
    DATABASES = { 
      'default': {
        'ENGINE': 'django.db.backends.mysql', 
        'NAME': 'projectsdb',
        'USER': 'projectsdb',
        'PASSWORD': 'notsecure',
        'HOST': 'localhost',   # Or an IP Address that your DB is hosted on
        'PORT': '3306',
        }, 
    }
else:
    DATABASES = { 
      'default': {
        'ENGINE': 'django.db.backends.mysql', 
        'NAME': 'projectsdb_dev',
        'USER': 'projectsdb',
        'PASSWORD': 'notsecure',
        'HOST': 'localhost',   # Or an IP Address that your DB is hosted on
        'PORT': '3306',
        },
    } 

我会说,为
dev
prod
创建单独的设置文件。或者,对于数据库,您只能使用环境变量

$ export ENV=PROD
然后在
settings.py中

import os
if os.environ.get('ENV') == "PROD":
    DATABASES = { 
      'default': {
        'ENGINE': 'django.db.backends.mysql', 
        'NAME': 'projectsdb',
        'USER': 'projectsdb',
        'PASSWORD': 'notsecure',
        'HOST': 'localhost',   # Or an IP Address that your DB is hosted on
        'PORT': '3306',
        }, 
    }
else:
    DATABASES = { 
      'default': {
        'ENGINE': 'django.db.backends.mysql', 
        'NAME': 'projectsdb_dev',
        'USER': 'projectsdb',
        'PASSWORD': 'notsecure',
        'HOST': 'localhost',   # Or an IP Address that your DB is hosted on
        'PORT': '3306',
        },
    } 

如果不指定默认数据库,则需要使用自动数据库路由器来指定模型将使用的数据库。您可以编写这些路由器类,然后指定指向它们的数据库路由器设置。路由器基本上包含一些告诉数据库操作去哪里的逻辑,您可以包括检查这是否是一个开发环境。

当您不指定默认数据库时,您需要使用自动数据库路由器来指定您的模型将使用的数据库。您可以编写这些路由器类,然后指定指向它们的数据库路由器设置。路由器基本上包含一些告诉数据库操作去哪里的逻辑,您可以检查这是否是一个开发环境。

如何管理每个数据库的迁移?Django能否在每个
migrations
目录中创建的文件之间区分与每个数据库相关的迁移?得到答案,它位于设置中,该设置也可以根据
ENV
变量进行更改。如何管理每个数据库的迁移?Django能否在每个
migrations
目录中创建的文件之间区分与每个数据库相关的迁移?得到答案,它位于设置中,该设置也可以根据
ENV
变量进行更改。