NEtraAi / backend /app /core /database.py
093xpku
Clean project layout deployment
9bc686b
Raw
History Blame
1.22 kB
from sqlalchemy import create_engine, event
from sqlalchemy.engine import Engine
from sqlalchemy.orm import declarative_base, sessionmaker
from app.core.config import settings
# Determine if using SQLite or Postgres
is_sqlite = settings.DATABASE_URL.startswith("sqlite")
connect_args = {}
if is_sqlite:
# SQLite requires disabling same thread checks for concurrent FastAPI endpoints
connect_args = {"check_same_thread": False}
# Engine setup
engine = create_engine(
settings.DATABASE_URL,
connect_args=connect_args,
# Standard pool config for Postgres (SQLite doesn't support pool pre-ping/size attributes)
**({
"pool_size": 20,
"max_overflow": 10,
"pool_recycle": 1800,
"pool_pre_ping": True
} if not is_sqlite else {})
)
@event.listens_for(Engine, "connect")
def set_sqlite_pragma(dbapi_connection, connection_record):
if is_sqlite:
cursor = dbapi_connection.cursor()
cursor.execute("PRAGMA foreign_keys=ON")
cursor.close()
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
Base = declarative_base()
def get_db():
db = SessionLocal()
try:
yield db
finally:
db.close()