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)