How to use two database one for development and other production in the same application django

45 Views Asked by At

I have two databases one for development and other for the production, i set two dbs in my settings, but how can i alternate between the two dbs. Now i use method using in all objects, but i dont know if it`sthe best form.

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'),
    }
}

example queryset

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

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

There are 1 best solutions below

1
Nick Langat On

You can switch between the two dbs via the settings.py file. Locally DEBUG is set to true and in production that is set to false. With this in mind:

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'),
    }
}