通过ip或其他方式切换数据库

时间:2014-12-29 05:03:01

标签: python django

这是我在django settings.py中关于数据库的设置 我现在使用的方法是使用参数TEST,如果TEST == True,请在我的计算机中使用db。 否则:在AWS上使用RDS 我想知道如何根据ip或

决定使用哪个数据库

请指导我谢谢!

TEST = True
if TEST==True:
    DATABASES = {   # localhost
        "default": {
            "ENGINE": "django.db.backends.postgresql_psycopg2",
            "NAME": " ",
            "USER": " ",
            # "PASSWORD": " ",
            "HOST": "localhost",
            "PORT": "5432",
        }
    }
else:
    DATABASES = {  #aws
        'default': {
            'ENGINE': 'django.db.backends.postgresql_psycopg2',
            'NAME': " ",
            'USER': " ",
            'PASSWORD': " ",
            'HOST': "xxx.ap-northeast-1.rds.amazonaws.com" ,
            'PORT': "5432",
        }
    }

2 个答案:

答案 0 :(得分:0)

您应该为prod和dev使用不同的设置文件。您可以拥有一个具有共享设置的基本设置文件,然后导入基本设置文件并更改dev / prod不同的变量(在本例中为DATABASES)

这样您就不必记住更改任何内容,并且您的设置将更清晰且可源控制。确保在wsgi.py中加载了正确的设置文件。

设置/ base.py

# shared things go in here
BASE_DIR = os.path.dirname(os.path.dirname(__file__))

INSTALLED_APPS = (
    'django.contrib.admin',
    ...
)

...

设置/ dev.py

from .base import *

DEBUG = True
TEMPLATE_DEBUG = True

DATABASES = {   # localhost
    "default": {
        "ENGINE": "django.db.backends.postgresql_psycopg2",
        "NAME": " ",
        "USER": " ",
        # "PASSWORD": " ",
        "HOST": "localhost",
        "PORT": "5432",
    }
}

设置/ prod.py

from .base import *

DEBUG = False
TEMPLATE_DEBUG = False

DATABASES = {  #aws
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': " ",
        'USER': " ",
        'PASSWORD': " ",
        'HOST': "xxx.ap-northeast-1.rds.amazonaws.com" ,
        'PORT': "5432",
    }
}

答案 1 :(得分:0)

我忘了提到的另一个可行的选择是使用环境变量。您可以在wsgi文件中设置环境变量,如下所示:

os.environ['VARNAME'] = 'value'

如果您正在使用虚拟环境,请将此激活脚本:

export VARNAME='value'

然后在您的settings.py文件中,你会有类似的东西:

env = os.environ['ENV']

if env == "dev":
    DATABASES = {   # localhost
        "default": {
            "ENGINE": "django.db.backends.postgresql_psycopg2",
            "NAME": " ",
            "USER": " ",
            # "PASSWORD": " ",
            "HOST": "localhost",
            "PORT": "5432",
        }
    }
elif env == "prod":
    DATABASES = {  #aws
        'default': {
            'ENGINE': 'django.db.backends.postgresql_psycopg2',
            'NAME': " ",
            'USER': " ",
            'PASSWORD': " ",
            'HOST': "xxx.ap-northeast-1.rds.amazonaws.com" ,
            'PORT': "5432",
        }
    }

根据您的设置,有几种方法可以设置环境变量,但我通常会添加到virtualenv的激活文件中,或者将其添加到wsgi文件中