Spaces:
Running
Running
File size: 1,224 Bytes
09801ca | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | import os
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker, declarative_base
from typing import Generator
import logging
logger = logging.getLogger(__name__)
# Fallback to local SQLite if Postgres URL is not provided
# In production, set DATABASE_URL="postgresql://user:password@localhost/datavision"
default_db_path = "/data/datavision.db" if os.path.exists("/data") else "./datavision.db"
SQLALCHEMY_DATABASE_URL = os.environ.get("DATABASE_URL", f"sqlite:///{default_db_path}")
try:
if SQLALCHEMY_DATABASE_URL.startswith("sqlite"):
engine = create_engine(
SQLALCHEMY_DATABASE_URL, connect_args={"check_same_thread": False}
)
else:
engine = create_engine(SQLALCHEMY_DATABASE_URL)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
Base = declarative_base()
except Exception as e:
logger.error(f"Failed to initialize database: {e}")
SessionLocal = None
Base = None
def get_db() -> Generator:
"""FastAPI Dependency for database sessions."""
if not SessionLocal:
yield None
return
db = SessionLocal()
try:
yield db
finally:
db.close()
|