|
from sqlalchemy import create_engine |
|
from sqlalchemy.ext.declarative import declarative_base |
|
from sqlalchemy.orm import sessionmaker |
|
import os |
|
from dotenv import load_dotenv |
|
import logging |
|
import urllib.parse |
|
|
|
|
|
logging.basicConfig(level=logging.INFO) |
|
logger = logging.getLogger(__name__) |
|
|
|
|
|
load_dotenv() |
|
|
|
|
|
DB_USER = os.getenv("DB_USER", "dev_cbs_admin") |
|
DB_PASSWORD = os.getenv("DB_PASSWORD", "password") |
|
DB_HOST = os.getenv("DB_HOST", "13.126.242.31") |
|
DB_PORT = os.getenv("DB_PORT", "5432") |
|
DB_NAME = os.getenv("DB_NAME", "vst") |
|
|
|
|
|
encoded_password = urllib.parse.quote_plus(DB_PASSWORD) |
|
|
|
|
|
logger.info(f"Attempting to connect to PostgreSQL database at {DB_HOST}:{DB_PORT}/{DB_NAME} as {DB_USER}") |
|
|
|
|
|
SQLALCHEMY_DATABASE_URL = f"postgresql://{DB_USER}:{encoded_password}@{DB_HOST}:{DB_PORT}/{DB_NAME}" |
|
|
|
masked_url = SQLALCHEMY_DATABASE_URL.replace(encoded_password, "****") |
|
logger.info(f"Connection URL: {masked_url}") |
|
|
|
try: |
|
|
|
engine = create_engine(SQLALCHEMY_DATABASE_URL) |
|
|
|
|
|
with engine.connect() as conn: |
|
logger.info("Database connection successful") |
|
except Exception as e: |
|
logger.error(f"Database connection error: {e}") |
|
|
|
logger.info("Using SQLite as fallback database") |
|
SQLALCHEMY_DATABASE_URL = "sqlite:///./visitor_management.db" |
|
engine = create_engine( |
|
SQLALCHEMY_DATABASE_URL, connect_args={"check_same_thread": False} |
|
) |
|
|
|
|
|
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) |
|
|
|
|
|
Base = declarative_base() |
|
|
|
|
|
def get_db(): |
|
db = SessionLocal() |
|
try: |
|
yield db |
|
finally: |
|
db.close() |
|
|