EmailAgentwithMemory / app /database /connection.py
Gaykar's picture
database changes
9545da5
Raw
History Blame Contribute Delete
1.48 kB
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker, Session
from app.core.config import settings
from psycopg_pool import ConnectionPool
from contextlib import contextmanager
DB_URL_FOR_CHECKPOINTER_STORE=settings.DB_URL_FOR_CHECKPOINTER_STORE
pool = ConnectionPool(
conninfo=DB_URL_FOR_CHECKPOINTER_STORE,
min_size=1,
max_size=10,
check=ConnectionPool.check_connection,
max_idle=300,
kwargs={"autocommit": True,"sslmode": "require"}
)
# sslmode=require means that our application will only connect to the database if a secure, encrypted connection can be established.
DB_URL_FOR_SQL_AL=settings.DB_URL_FOR_SQL_AL
# pool_pre_ping=True: It checks if a connection is still alive before using it. If it's dead, it recycles it so the app doesn't crash.
# pool_recycle=300: It closes and recreates connections every 5 minutes (300 seconds) to prevent stale connections.
engine = create_engine(
DB_URL_FOR_SQL_AL,
pool_pre_ping=True,
pool_recycle=300
)
# This is a factory that generates individual database sessions
SessionLocal = sessionmaker(bind=engine, autoflush=False, autocommit=False)
# This creates a session factory. We set autoflush=False and autocommit=False because we want manual control over when data is saved (committed) to the database, which prevents accidental or premature changes.
def get_session():
db = SessionLocal()
try:
yield db
finally:
db.close()