django wait for database

Step 1: Install Required Packages

pip install django psycopg2

Step 2: Configure Database Settings in settings.py

# settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'your_database_name',
        'USER': 'your_database_user',
        'PASSWORD': 'your_database_password',
        'HOST': 'your_database_host',
        'PORT': 'your_database_port',
    }
}

Step 3: Create a Custom Database Wrapper

# database.py in your Django app

import time
from django.db.backends.postgresql.base import DatabaseWrapper

class WaitDatabaseWrapper(DatabaseWrapper):
    def get_new_connection(self, conn_params):
        connection = super().get_new_connection(conn_params)
        while True:
            try:
                with connection.cursor() as cursor:
                    cursor.execute("SELECT 1")
                break
            except Exception:
                time.sleep(1)
        return connection

Step 4: Use Custom Database Wrapper in settings.py

# settings.py

DATABASES = {
    'default': {
        'ENGINE': 'your_project_name.database.WaitDatabaseWrapper',
        'NAME': 'your_database_name',
        'USER': 'your_database_user',
        'PASSWORD': 'your_database_password',
        'HOST': 'your_database_host',
        'PORT': 'your_database_port',
    }
}

Step 5: Apply Migrations

python manage.py migrate

Step 6: Run Django Development Server

python manage.py runserver