flowCreate.solutions

Development Migration Runner

This document provides an example run_dev_migrations.py wrapper script. It runs Alembic commands against a development database by selecting the correct database URL and setting a consistent environment context.

Usage

# Show current revision
PYTHONPATH=. python migrations/run_dev_migrations.py current

# Show revision history
PYTHONPATH=. python migrations/run_dev_migrations.py history

# Upgrade to latest revision
PYTHONPATH=. python migrations/run_dev_migrations.py upgrade head

# Create a new revision (auto-generated from model changes)
PYTHONPATH=. python migrations/run_dev_migrations.py revision --autogenerate -m "Add new table"

Script Implementation

Save this file as migrations/run_dev_migrations.py.

import os
import subprocess
import sys
import logging
from dotenv import load_dotenv

logging.basicConfig(level=logging.INFO)
logger = logging.getLogger("migrations.run_dev_migrations")

# Load environment variables from .env (optional but convenient for local usage)
load_dotenv(override=True)

APP_ENV = "development"
os.environ["ENVIRONMENT"] = APP_ENV

# Select the dev database URL and expose it for Alembic.
# Use whatever naming convention your project adopts; keep it consistent across environments.
dev_url = os.getenv("DATABASE_URL_DEV")
if not dev_url:
    logger.error("DATABASE_URL_DEV is not set. Cannot continue.")
    sys.exit(1)

os.environ["DATABASE_URL"] = dev_url
logger.info("Using development database URL (ENVIRONMENT=%s)", APP_ENV)

if len(sys.argv) < 2:
    logger.info("Usage: python migrations/run_dev_migrations.py <alembic-args...>")
    logger.info("Examples:")
    logger.info("  python migrations/run_dev_migrations.py current")
    logger.info("  python migrations/run_dev_migrations.py upgrade head")
    logger.info('  python migrations/run_dev_migrations.py revision --autogenerate -m "Add new table"')
    sys.exit(1)

# Pass through to Alembic so all Alembic commands are supported.
subprocess.run(["alembic", *sys.argv[1:]], check=True)