import os import subprocess from pathlib import Path from sqlalchemy import text from sqlalchemy.orm import Session from app.db.session import engine from app.core.config import settings def init_db() -> None: """Initialize database with required tables and data.""" # Ensure database directory exists Path(settings.DB_DIR).mkdir(parents=True, exist_ok=True) # Try to connect to check if the database is accessible with engine.connect() as conn: try: conn.execute(text("SELECT 1")) print("Database connection successful") except Exception as e: print(f"Database connection error: {e}") raise # Run alembic upgrade to create tables try: # Get the project root directory (where alembic.ini is located) project_root = Path(__file__).parent.parent.parent.absolute() # Change to project root directory and run alembic os.chdir(project_root) subprocess.run(["alembic", "upgrade", "head"], check=True) print("Database migration successful") except subprocess.CalledProcessError as e: print(f"Database migration error: {e}") raise print("Database initialized successfully") if __name__ == "__main__": init_db()