kopia lustrzana https://github.com/simonw/datasette
Initial working proof of concept
rodzic
ac9d66817d
commit
de04d7a854
|
@ -99,3 +99,6 @@ ENV/
|
|||
|
||||
# mypy
|
||||
.mypy_cache/
|
||||
|
||||
# SQLite databases
|
||||
*.db
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
FROM python:3
|
||||
COPY . /app
|
||||
WORKDIR /app
|
||||
RUN pip install -r requirements.txt
|
||||
EXPOSE 8006
|
||||
CMD ["python", "app.py"]
|
|
@ -0,0 +1,43 @@
|
|||
from sanic import Sanic
|
||||
from sanic import response
|
||||
from sanic_jinja2 import SanicJinja2
|
||||
import sqlite3
|
||||
import json
|
||||
|
||||
app = Sanic(__name__)
|
||||
jinja = SanicJinja2(app)
|
||||
|
||||
#conn = sqlite3.connect('file:flights.db?immutable=1', uri=True)
|
||||
conn = sqlite3.connect('file:northwind.db?immutable=1', uri=True)
|
||||
conn.row_factory = sqlite3.Row
|
||||
|
||||
|
||||
@app.route('/')
|
||||
async def index(request, sql=None):
|
||||
sql = sql or request.args.get('sql', '')
|
||||
if not sql:
|
||||
sql = 'select * from sqlite_master'
|
||||
rows = conn.execute(sql)
|
||||
headers = [r[0] for r in rows.description]
|
||||
return jinja.render('index.html', request,
|
||||
headers=headers,
|
||||
rows=list(rows),
|
||||
)
|
||||
|
||||
|
||||
@app.route('/<table:[a-zA-Z0-9].*>.json')
|
||||
async def table_json(request, table):
|
||||
sql = 'select * from {} limit 20'.format(table)
|
||||
return response.json([
|
||||
dict(r) for r in conn.execute(sql)
|
||||
])
|
||||
|
||||
|
||||
@app.route('/<table:[a-zA-Z0-9].*>')
|
||||
async def table(request, table):
|
||||
sql = 'select * from {} limit 20'.format(table)
|
||||
return await index(request, sql)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
app.run(host="0.0.0.0", port=8006)
|
|
@ -0,0 +1,2 @@
|
|||
sanic==0.6.0
|
||||
sanic-jinja2==0.5.5
|
|
@ -0,0 +1,20 @@
|
|||
<style>
|
||||
td {
|
||||
white-space: pre;
|
||||
vertical-align: top;
|
||||
border-top: 1px solid #666;
|
||||
padding: 2px 4px;
|
||||
}
|
||||
</style>
|
||||
<table>
|
||||
<tr>
|
||||
{% for header in headers %}<th scope="col">{{ header }}</th>{% endfor %}
|
||||
</tr>
|
||||
{% for row in rows %}
|
||||
<tr>
|
||||
{% for td in row %}
|
||||
<td>{{ td }}</td>
|
||||
{% endfor %}
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
Ładowanie…
Reference in New Issue