SoFunction
Updated on 2025-04-25

A complete guide to configuring MySQL databases for multiple environments

Configuring MySQL databases with multiple environments in a Django project is a common requirement, especially using different database configurations in development, testing, and production environments. You can do this by using conditional statements or environment variables in the file.

1. Use environment variables

Using environment variables is a flexible and secure way to configure databases for multiple environments. You can use the django-environ library to simplify the management of environment variables.

Install django-environ

First, install the django-environ library:

pip install django-environ

Configuration

Edit the file and use environment to read environment variables:

# myproject/

import environ

# Initialize environment variablesenv = ()
.read_env()

# Database configurationDATABASES = {
    'default': ('DATABASE_URL', default='mysql://root:password@localhost:3306/dbname')
}

#Other configurationsDEBUG = ('DEBUG', default=False)
SECRET_KEY = env('SECRET_KEY')
ALLOWED_HOSTS = ('ALLOWED_HOSTS', default=['localhost'])

Set environment variables

Set corresponding environment variables in different environments. You can set these variables in the .env file, or set them directly in the operating system.

.env file example

Create a .env file in the project root directory and add the following:

# Development EnvironmentDEBUG=True
SECRET_KEY=your_secret_key_for_development
ALLOWED_HOSTS=localhost,127.0.0.1
DATABASE_URL=mysql://root:password@localhost:3306/dev_db

# Test environment# DEBUG=False
# SECRET_KEY=your_secret_key_for_testing
# ALLOWED_HOSTS=localhost,127.0.0.1
# DATABASE_URL=mysql://root:password@localhost:3306/test_db

# Production environment# DEBUG=False
# SECRET_KEY=your_secret_key_for_production
# ALLOWED_HOSTS=
# DATABASE_URL=mysql://root:[email protected]:3306/ostp

Operating system environment variables

You can also set these values ​​in the operating system environment variables. For example, on Linux or macOS, you can run it in a terminal:

export DEBUG=True
export SECRET_KEY=your_secret_key_for_development
export ALLOWED_HOSTS=localhost,127.0.0.1
export DATABASE_URL=mysql://root:password@localhost:3306/dev_db

Windows Batch Processing

Set in the bat script

@echo off
chcp 65001
echo "Set the database running environment as a development environment"
set DEBUG=True
set SECRET_KEY=123456
set ALLOWED_HOSTS=localhost,127.0.0.1
set DATABASE_URL=mysql://root:123456@localhost:3306/test

2. Use multiple settings files

Another way is to create a separate settings file for each environment. This approach is more intuitive, but may lead to more file management.

Create multiple settings files

Create the following file in the myproject directory:

  • settings_base.py: basic configuration
  • settings_dev.py: development environment configuration
  • settings_test.py: Test environment configuration
  • settings_prod.py: Production environment configuration

settings_base.py

# myproject/settings_base.py

import os

# Basic configurationBASE_DIR = (((__file__)))
SECRET_KEY = 'your_default_secret_key'
ALLOWED_HOSTS = []

INSTALLED_APPS = [
    '',
    '',
    '',
    '',
    '',
    '',
    # Your application    'myapp',
]

MIDDLEWARE = [
    '',
    '',
    '',
    '',
    '',
    '',
    '',
]

ROOT_URLCONF = ''

TEMPLATES = [
    {
        'BACKEND': '',
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                '.context_processors.debug',
                '.context_processors.request',
                '.context_processors.auth',
                '.context_processors.messages',
            ],
        },
    },
]

WSGI_APPLICATION = ''

# Static file configurationSTATIC_URL = '/static/'

settings_dev.py

# myproject/settings_dev.py

from .settings_base import *

#Development environment configurationDEBUG = True
SECRET_KEY = 'your_secret_key_for_development'
ALLOWED_HOSTS = ['localhost', '127.0.0.1']
DATABASES = {
    'default': {
        'ENGINE': '',
        'NAME': 'dev_db',
        'USER': 'root',
        'PASSWORD': 'password',
        'HOST': 'localhost',
        'PORT': '3306',
    }
}

settings_test.py

# myproject/settings_test.py

from .settings_base import *

# Test environment configurationDEBUG = False
SECRET_KEY = 'your_secret_key_for_testing'
ALLOWED_HOSTS = ['localhost', '127.0.0.1']
DATABASES = {
    'default': {
        'ENGINE': '',
        'NAME': 'test_db',
        'USER': 'root',
        'PASSWORD': 'password',
        'HOST': 'localhost',
        'PORT': '3306',
    }
}

settings_prod.py

# myproject/settings_prod.py

from .settings_base import *

# Production environment configurationDEBUG = False
SECRET_KEY = 'your_secret_key_for_production'
ALLOWED_HOSTS = ['']
DATABASES = {
    'default': {
        'ENGINE': '',
        'NAME': 'ostp',
        'USER': 'root',
        'PASSWORD': 'ostp',
        'HOST': '10.177.111.228',
        'PORT': '3306',
    }
}

Configuration and

Specify which settings file to use in and .

#!/usr/bin/env python
import os
import sys

if __name__ == "__main__":
    ('DJANGO_SETTINGS_MODULE', 'myproject.settings_dev')  # Switch the environment as needed    try:
        from  import execute_from_command_line
    except ImportError as exc:
        raise ImportError(
            "Couldn't import Django. Are you sure it's installed and "
            "available on your PYTHONPATH environment variable? Did you "
            "forget to activate a virtual environment?"
        ) from exc
    execute_from_command_line()

import os
from  import get_wsgi_application

('DJANGO_SETTINGS_MODULE', 'myproject.settings_prod')  # Switch the environment as neededapplication = get_wsgi_application()

Summarize

By using environment variables or multiple settings files, you can easily configure MySQL databases for multiple environments in your Django project. Which method to choose depends on your specific needs and the workflow of your team. Using environment variables provides better flexibility and security, while using multiple settings files is more intuitive and manageable.

The above is the detailed guide for configuring MySQL databases for multiple environments. For more information about Django configuring MySQL, please follow my other related articles!