From 32222990da3e42b81969742da9ebc9959b9ae03f Mon Sep 17 00:00:00 2001 From: Ryan Golhar Date: Sat, 24 Jan 2026 09:56:21 -0500 Subject: [PATCH 1/3] Enable db connection pooling --- core/db.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/core/db.py b/core/db.py index 758db1d..5609620 100644 --- a/core/db.py +++ b/core/db.py @@ -7,8 +7,15 @@ # Connect to db # Set echo=True to see SQL statements in logs -engine = create_engine(str(get_settings().SQLALCHEMY_DATABASE_URI), echo=False) +engine = create_engine( + str(get_settings().SQLALCHEMY_DATABASE_URI), + echo=False, + pool_pre_ping=True, # Test connections before using them + pool_recycle=3600, # Recycle connections after 1 hour (3600 seconds) + pool_size=5, # Number of connections to maintain in pool + max_overflow=10 # Max connections beyond pool_size +) # Yield session def get_session(): From e6b784e602b37225ef2a69bdd92e494baec90ffb Mon Sep 17 00:00:00 2001 From: Ryan Golhar Date: Sat, 24 Jan 2026 10:01:46 -0500 Subject: [PATCH 2/3] need to adjust create_engine for sqlite --- core/db.py | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/core/db.py b/core/db.py index 5609620..015502e 100644 --- a/core/db.py +++ b/core/db.py @@ -7,15 +7,21 @@ # Connect to db # Set echo=True to see SQL statements in logs - -engine = create_engine( - str(get_settings().SQLALCHEMY_DATABASE_URI), - echo=False, - pool_pre_ping=True, # Test connections before using them - pool_recycle=3600, # Recycle connections after 1 hour (3600 seconds) - pool_size=5, # Number of connections to maintain in pool - max_overflow=10 # Max connections beyond pool_size -) +if database_uri.startswith("sqlite"): + engine = create_engine( + str(get_settings().SQLALCHEMY_DATABASE_URI), + echo=False, + connect_args={"check_same_thread": False} # Needed for SQLite + ) +else: + engine = create_engine( + str(get_settings().SQLALCHEMY_DATABASE_URI), + echo=False, + pool_pre_ping=True, # Test connections before using them + pool_recycle=3600, # Recycle connections after 1 hour (3600 seconds) + pool_size=5, # Number of connections to maintain in pool + max_overflow=10 # Max connections beyond pool_size + ) # Yield session def get_session(): From 7f6ca4aa806c73df6f05644cf5f4149306b5ef4f Mon Sep 17 00:00:00 2001 From: Ryan Golhar Date: Sat, 24 Jan 2026 10:02:39 -0500 Subject: [PATCH 3/3] need to adjust create_engine for sqlite --- core/db.py | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/core/db.py b/core/db.py index 015502e..f934474 100644 --- a/core/db.py +++ b/core/db.py @@ -5,24 +5,25 @@ from sqlmodel import create_engine, Session from core.config import get_settings -# Connect to db -# Set echo=True to see SQL statements in logs -if database_uri.startswith("sqlite"): - engine = create_engine( - str(get_settings().SQLALCHEMY_DATABASE_URI), - echo=False, - connect_args={"check_same_thread": False} # Needed for SQLite - ) +# Get database URI +database_uri = str(get_settings().SQLALCHEMY_DATABASE_URI) + +# Configure engine with connection pool settings for non-SQLite databases +if database_uri.startswith('sqlite'): + # SQLite: Use simple configuration (no pool parameters) + engine = create_engine(database_uri, echo=False) else: + # PostgreSQL/MySQL: Use connection pool with keep-alive settings engine = create_engine( - str(get_settings().SQLALCHEMY_DATABASE_URI), + database_uri, echo=False, - pool_pre_ping=True, # Test connections before using them - pool_recycle=3600, # Recycle connections after 1 hour (3600 seconds) - pool_size=5, # Number of connections to maintain in pool - max_overflow=10 # Max connections beyond pool_size + pool_pre_ping=True, # Test connections before using them + pool_recycle=3600, # Recycle connections after 1 hour + pool_size=5, # Number of connections in pool + max_overflow=10 # Max additional connections during spikes ) + # Yield session def get_session(): with Session(engine) as session: