| """ |
| Database Configuration and Session Management |
| ============================================= |
| SQLAlchemy database setup for DevUnity portfolio. |
| |
| Supports: |
| - SQLite (development) |
| - PostgreSQL (production) |
| |
| Usage: |
| from database import get_db, Base, engine |
| |
| # Create tables |
| Base.metadata.create_all(bind=engine) |
| |
| # Use in FastAPI |
| @app.get("/items") |
| def get_items(db: Session = Depends(get_db)): |
| ... |
| """ |
|
|
| from sqlalchemy import create_engine |
| from sqlalchemy.ext.declarative import declarative_base |
| from sqlalchemy.orm import sessionmaker, Session |
| from contextlib import contextmanager |
| import os |
|
|
| |
| DATABASE_URL = os.getenv( |
| "DATABASE_URL", |
| "sqlite:///./devunity.db" |
| ) |
|
|
| |
| |
|
|
| |
| connect_args = {} |
| if DATABASE_URL.startswith("sqlite"): |
| connect_args["check_same_thread"] = False |
|
|
| engine = create_engine( |
| DATABASE_URL, |
| echo=os.getenv("SQL_ECHO", "false").lower() == "true", |
| pool_pre_ping=True, |
| pool_size=10, |
| max_overflow=20, |
| ) |
|
|
| |
| SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) |
|
|
| |
| Base = declarative_base() |
|
|
|
|
| @contextmanager |
| def get_db_context(): |
| """Context manager for database sessions.""" |
| db = SessionLocal() |
| try: |
| yield db |
| db.commit() |
| except Exception: |
| db.rollback() |
| raise |
| finally: |
| db.close() |
|
|
|
|
| def get_db(): |
| """ |
| Dependency for FastAPI routes. |
| |
| Usage: |
| @app.get("/items") |
| def get_items(db: Session = Depends(get_db)): |
| ... |
| """ |
| db = SessionLocal() |
| try: |
| yield db |
| finally: |
| db.close() |
|
|
|
|
| def init_db(): |
| """Initialize database - create all tables.""" |
| from models import ContactMessage, Video, LearningProgress, TaughtContent, BackendlessProject, NoTeachLLM |
| |
| Base.metadata.create_all(bind=engine) |
| |
| print("β
Database initialized successfully!") |
| print(f"π Database location: {DATABASE_URL}") |
|
|
|
|
| if __name__ == "__main__": |
| init_db() |
|
|