"""Database connection and session management using SQLModel.""" import os from sqlmodel import create_engine, Session, SQLModel from dotenv import load_dotenv load_dotenv() DATABASE_URL = os.getenv("DATABASE_URL", "sqlite:///./todos.db") # Remove quotes if present in DATABASE_URL if DATABASE_URL.startswith('"') and DATABASE_URL.endswith('"'): DATABASE_URL = DATABASE_URL[1:-1] # Create engine with appropriate settings for SQLite vs PostgreSQL if "sqlite" in DATABASE_URL: engine = create_engine(DATABASE_URL, connect_args={"check_same_thread": False}) else: # PostgreSQL (including Neon) - use psycopg3 if DATABASE_URL.startswith("postgresql://"): DATABASE_URL = DATABASE_URL.replace("postgresql://", "postgresql+psycopg://", 1) engine = create_engine(DATABASE_URL, pool_pre_ping=True) def get_db(): """Dependency for database session.""" with Session(engine) as session: yield session def init_db(): """Create all database tables.""" SQLModel.metadata.create_all(engine)