backend_chatbot / app /db /database.py
helal94hb1's picture
feat: Initial commit for Hugging Face deployment
58de15f
# app/db/database.py
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
import logging
# Import settings to get the database URL
from app.core.config import settings
logger = logging.getLogger(__name__)
# Ensure the DATABASE_URL (which is PostgresDsn type) is converted to string for create_engine
SQLALCHEMY_DATABASE_URL = str(settings.DATABASE_URL)
logger.info(f"Database URL Prefix: {SQLALCHEMY_DATABASE_URL[:SQLALCHEMY_DATABASE_URL.find('@') if '@' in SQLALCHEMY_DATABASE_URL else 20]}...") # Log prefix only, hiding credentials
try:
# Create the SQLAlchemy engine
# pool_pre_ping=True helps handle potential connection drops
engine = create_engine(
SQLALCHEMY_DATABASE_URL,
pool_pre_ping=True
# Add connect_args if needed, e.g., for SQLite:
# connect_args={"check_same_thread": False}
)
# Create a configured "Session" class
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
# Create a Base class for declarative class definitions
Base = declarative_base()
logger.info("SQLAlchemy engine and SessionLocal created successfully.")
except Exception as e:
logger.exception(f"Failed to create SQLAlchemy engine or SessionLocal: {e}")
# Depending on requirements, might want to raise error to prevent startup
raise RuntimeError("Database configuration failed.") from e
# Dependency function to get a DB session for API endpoints
def get_db():
db = SessionLocal()
try:
yield db
finally:
db.close()