Tri-Netra-AI / db.py
anannyavyas1's picture
Upload folder using huggingface_hub (part 22)
6575be7 verified
Raw
History Blame Contribute Delete
3.23 kB
import os
import psycopg2
from psycopg2.extras import RealDictCursor
import time
import logging
logger = logging.getLogger('trinetra.db')
def get_connection():
db_url = os.environ.get('DATABASE_URL', 'postgresql://neondb_owner:npg_qTz5RJ3ALUGy@ep-frosty-resonance-adeowc34-pooler.c-2.us-east-1.aws.neon.tech/neondb?sslmode=require&channel_binding=require')
try:
conn = psycopg2.connect(db_url)
return conn
except Exception as e:
logger.error(f"Failed to connect to DB: {e}")
return None
def init_db():
conn = get_connection()
if not conn:
return
try:
with conn.cursor() as cur:
cur.execute("""
CREATE TABLE IF NOT EXISTS scans (
id SERIAL PRIMARY KEY,
scan_id VARCHAR(50) NOT NULL,
patient_name VARCHAR(100),
verdict VARCHAR(50),
confidence VARCHAR(20),
risk_level VARCHAR(20),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
""")
conn.commit()
logger.info("Database initialized successfully.")
except Exception as e:
logger.error(f"DB Init error: {e}")
finally:
conn.close()
def get_total_scans():
conn = get_connection()
if not conn:
return 0
try:
with conn.cursor() as cur:
cur.execute("SELECT COUNT(*) FROM scans")
result = cur.fetchone()
return result[0] if result else 0
except Exception as e:
logger.error(f"Error getting total scans: {e}")
return 0
finally:
conn.close()
def save_scan(scan_id, patient_name, verdict, confidence, risk_level):
conn = get_connection()
if not conn:
return
try:
with conn.cursor() as cur:
cur.execute("""
INSERT INTO scans (scan_id, patient_name, verdict, confidence, risk_level)
VALUES (%s, %s, %s, %s, %s)
""", (scan_id, patient_name, verdict, confidence, risk_level))
conn.commit()
except Exception as e:
logger.error(f"Error saving scan: {e}")
finally:
conn.close()
def search_scans(query=""):
conn = get_connection()
if not conn:
return []
try:
with conn.cursor(cursor_factory=RealDictCursor) as cur:
if query:
search_term = f"%{query}%"
cur.execute("""
SELECT * FROM scans
WHERE patient_name ILIKE %s OR scan_id ILIKE %s
ORDER BY created_at DESC LIMIT 50
""", (search_term, search_term))
else:
cur.execute("SELECT * FROM scans ORDER BY created_at DESC LIMIT 50")
results = cur.fetchall()
# Convert timestamp to string for JSON serialization
for row in results:
if row.get('created_at'):
row['created_at'] = row['created_at'].isoformat()
return results
except Exception as e:
logger.error(f"Error searching scans: {e}")
return []
finally:
conn.close()