from flask import Flask, request, jsonify, render_template_string import psycopg2 import os app = Flask(__name__) DB_PARAMS = { 'dbname': os.getenv('POSTGRES_DB', 'mydatabase'), 'user': os.getenv('POSTGRES_USER', 'myuser'), 'password': os.getenv('POSTGRES_PASSWORD', 'mypassword'), 'host': 'localhost', 'port': 5432 } def get_conn(): return psycopg2.connect(**DB_PARAMS) @app.route("/") def index(): html = """ Database Status

Database Status

Loading...

Run Query


Results



      
    
    
    """
    return render_template_string(html)

@app.route("/api/health")
def health():
    try:
        conn = get_conn()
        conn.close()
        return jsonify({'status': 'ok', 'connected': True})
    except Exception as e:
        return jsonify({'status': 'error', 'connected': False, 'detail': str(e)}), 500

@app.route("/api/query", methods=["POST"])
def query():
    data = request.get_json()
    sql = data.get("query", "")
    try:
        conn = get_conn()
        cur = conn.cursor()
        cur.execute(sql)
        if cur.description:
            rows = cur.fetchall()
            columns = [desc[0] for desc in cur.description]
            result = [dict(zip(columns, row)) for row in rows]
        else:
            conn.commit()
            result = {"rows_affected": cur.rowcount}
        cur.close()
        conn.close()
        return jsonify(result)
    except Exception as e:
        return jsonify({"error": str(e)}), 400

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=7860)