Created server
This commit is contained in:
parent
ddca6d40ed
commit
8ab19c73b4
3 changed files with 75 additions and 0 deletions
|
|
@ -0,0 +1,3 @@
|
||||||
|
# How to
|
||||||
|
Run exposedb.py and supply a pyodbc connection string
|
||||||
|
Example: `python exposedb.py "DSN=MyDSN"`
|
||||||
69
exposedb.py
Normal file
69
exposedb.py
Normal file
|
|
@ -0,0 +1,69 @@
|
||||||
|
from flask import Flask, request, Response
|
||||||
|
import pyodbc
|
||||||
|
import pandas as pd
|
||||||
|
from collections import defaultdict
|
||||||
|
import os
|
||||||
|
|
||||||
|
app = Flask(__name__)
|
||||||
|
CONN = False
|
||||||
|
STYLE = """
|
||||||
|
<style>
|
||||||
|
.my-table {
|
||||||
|
border-collapse: collapse;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.my-table th, .my-table td {
|
||||||
|
border: 1px solid #ccc;
|
||||||
|
padding: 6px;
|
||||||
|
text-align: right;
|
||||||
|
vertical-align: top;
|
||||||
|
}
|
||||||
|
|
||||||
|
.my-table th {
|
||||||
|
background: #333;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
"""
|
||||||
|
@app.route("/")
|
||||||
|
def tables():
|
||||||
|
cursor = CONN.cursor()
|
||||||
|
tables = []
|
||||||
|
for row in cursor.tables():
|
||||||
|
if row.table_type == "TABLE":
|
||||||
|
tables.append(row.table_name)
|
||||||
|
html = "<h1>Tables</h1><ul>"
|
||||||
|
for t in tables:
|
||||||
|
html += f'<li><a href="/table/{t}">{t}</a></li>'
|
||||||
|
html += "</ul>"
|
||||||
|
return html
|
||||||
|
|
||||||
|
@app.route("/table/<name>")
|
||||||
|
def table(name):
|
||||||
|
f = request.args.get("f")
|
||||||
|
v = request.args.get("v")
|
||||||
|
query = f"SELECT * FROM [{name}]"
|
||||||
|
if f and v:
|
||||||
|
query += f"WHERE `{f}` = ?"
|
||||||
|
df = pd.read_sql(query, CONN, params=[v])
|
||||||
|
else:
|
||||||
|
df = pd.read_sql(query, CONN)
|
||||||
|
def gen():
|
||||||
|
yield STYLE
|
||||||
|
yield "<html><body><table border='1' class='my-table'>"
|
||||||
|
yield "<tr>" + "".join(
|
||||||
|
f"<th>{c}</th>" for c in df.columns
|
||||||
|
) + "</tr>"
|
||||||
|
for row in df.itertuples(index=False):
|
||||||
|
yield "<tr>" + "".join(
|
||||||
|
f"<td>{v}</td>" for v in row
|
||||||
|
) + "</tr>"
|
||||||
|
yield "</table></body></html>"
|
||||||
|
return Response(gen(), mimetype="text/html")
|
||||||
|
|
||||||
|
if len(sys.argv) > 1:
|
||||||
|
CONN = pyodbc.connect(f"{sys.argv[1]}")
|
||||||
|
app.run(host="0.0.0.0", port=5000, debug=True, use_reloader=False)
|
||||||
|
else:
|
||||||
|
print("You need to supply a pyodbc connection string")
|
||||||
3
requirements.txt
Normal file
3
requirements.txt
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
flask
|
||||||
|
pandas
|
||||||
|
pyodbc
|
||||||
Loading…
Add table
Add a link
Reference in a new issue