Spaces:
Sleeping
Sleeping
| """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) | |