django 如何在同一个应用程序中使用两个数据库,一个用于开发,另一个用于生产

u4vypkhs  于 2023-10-21  发布在  Go
关注(0)|答案(1)|浏览(84)

我有两个数据库,一个用于开发,另一个用于生产,我在设置中设置了两个数据库,但我如何在两个数据库之间交替。现在我在所有对象中使用方法,但我不知道这是否是最好的形式。
settings.py

DATABASES = {
    'default': {
        'ENGINE': os.getenv('DB_PRODUCTION_ENGINE', 'change-me'),
        'NAME': os.getenv('POSTGRES_PRODUCTION_DB', 'change-me'),
        'USER': os.getenv('POSTGRES_PRODUCTION_DB_USER', 'change-me'),
        'PASSWORD': os.getenv('POSTGRES_PRODUCTION_DB_PASSWORD', 'change-me'),
        'HOST': os.getenv('POSTGRES_PRODUCTION_HOST', 'change-me'),
        'PORT': os.getenv('POSTGRES_PRODUCTION_PORT', 'change-me'),
    },
    'development': {
        'ENGINE': os.getenv('DB_DEVELOPMENT_ENGINE', 'change-me'),
        'NAME': os.getenv('POSTGRES_DEVELOPMENT_DB', 'change-me'),
        'USER': os.getenv('POSTGRES_DEVELOPMENT_DB_USER', 'change-me'),
        'PASSWORD': os.getenv('POSTGRES_DEVELOPMENT_DB_PASSWORD', 'change-me'),
        'HOST': os.getenv('POSTGRES_DEVELOPMENT_HOST', 'change-me'),
        'PORT': os.getenv('POSTGRES_DEVELOPMENT_PORT', 'change-me'),
    }
}

示例查询集

def get_database_name(request):
    environment = request.session.get('environment', 'default')
    return environment

using = get_database_name(request)
model = Model.objects.using(using)
w7t8yxp5

w7t8yxp51#

您可以通过www.example.com文件在两个dbs之间切换settings.py。本地DEBUG设置为true,生产环境中设置为false。考虑到这一点:

if DEBUG:
    DATABASES = {
    'default': {
        'ENGINE': os.getenv('DB_DEVELOPMENT_ENGINE', 'change-me'),
        'NAME': os.getenv('POSTGRES_DEVELOPMENT_DB', 'change-me'),
        'USER': os.getenv('POSTGRES_DEVELOPMENT_DB_USER', 'change-me'),
        'PASSWORD': os.getenv('POSTGRES_DEVELOPMENT_DB_PASSWORD', 'change-me'),
        'HOST': os.getenv('POSTGRES_DEVELOPMENT_HOST', 'change-me'),
        'PORT': os.getenv('POSTGRES_DEVELOPMENT_PORT', 'change-me'),
    }
}
else:
    DATABASES = {
    'default': {
        'ENGINE': os.getenv('DB_PRODUCTION_ENGINE', 'change-me'),
        'NAME': os.getenv('POSTGRES_PRODUCTION_DB', 'change-me'),
        'USER': os.getenv('POSTGRES_PRODUCTION_DB_USER', 'change-me'),
        'PASSWORD': os.getenv('POSTGRES_PRODUCTION_DB_PASSWORD', 'change-me'),
        'HOST': os.getenv('POSTGRES_PRODUCTION_HOST', 'change-me'),
        'PORT': os.getenv('POSTGRES_PRODUCTION_PORT', 'change-me'),
    }
}

相关问题