Flask Routing mit SQLite und Highcharts
Verfasst: Sonntag 28. Oktober 2018, 20:50
Ich bin in meinem Projekt soweit gekommen, dass ich Daten in Highcharts auslesen kann und bin dabei das ganze in Bootstrap zu integrieren. In Flask habe ich eine Datenbank abfrage und ich habe ein Code um den Highchart zu visualisieren mit manuellen Daten, jetzt möchte ich gerne die Datenbank auslesen und das Ergebnis nutzen um den Chart darzustellen. Da weiß ich jedoch nicht wie ich die Datenbank abfrage mit dem visualisieren zusammen bringe.
Wie bekomme ich die Ergebnisse der Datenbank abfrage in den Highchart Teil? In der app.route('/data') werden die Arrays Series1 und Series2 erzeugt, die sollen in der app.route('graph') in den Teil "data": [1,2,3] zu "data":[series1] werden. Da es jedoch zwei verschiedene app.route sind, weiß ich nicht wie ich da untereinander kommuniziere oder wie ich das sonst zusammen bringe.(. Die Arrays werden richtig erzeugt und das Chart mit den manuellen Daten funktioniert auch.
Hier der Code zum Verständnis:
Wie bekomme ich die Ergebnisse der Datenbank abfrage in den Highchart Teil? In der app.route('/data') werden die Arrays Series1 und Series2 erzeugt, die sollen in der app.route('graph') in den Teil "data": [1,2,3] zu "data":[series1] werden. Da es jedoch zwei verschiedene app.route sind, weiß ich nicht wie ich da untereinander kommuniziere oder wie ich das sonst zusammen bringe.(. Die Arrays werden richtig erzeugt und das Chart mit den manuellen Daten funktioniert auch.
Hier der Code zum Verständnis:
Code: Alles auswählen
from flask import Flask, render_template
import sqlite3
from datetime import datetime
app = Flask(__name__)
@app.route('/data')
def auslesen():
database = ("fuellstand.db")
series1 = []
series2 = []
# con = connection c = coursor
con = sqlite3.connect(database)
c = con.cursor()
c.execute("SELECT timestamp, liter, prozent FROM fuellstand")
data = c.fetchall()
print("Datenbank ausgelesen")
print(data)
##Versuchen ein Datenarray zu erzeugen
for row in data:
timestamp = row[0]
volumen = row[1]
series1.append({'x': (datetime.utcfromtimestamp(timestamp).strftime('%Y-%m-%d %H:%M:%S')), 'y': volumen})
for row in data:
timestamp = row[0]
prozent = row[2]
series2.append({'x': (datetime.utcfromtimestamp(timestamp).strftime('%Y-%m-%d %H:%M:%S')), 'y': prozent})
con.commit()
con.close()
print(series1)
print(series2)
return render_template(series1=series1, series2=series2)
@app.route('/graph')
def graph(chartID='chart_ID', chart_type='line', chart_height=500):
chart = {"renderTo": chartID, "type": chart_type, "height": chart_height,}
series = [{"name": 'Label1', "data": [1, 2, 3]}, {"name": 'Label2', "data": [4, 5, 6]}]
charttitle = {"text": 'Füllstand'}
xAxis = {"type": 'datetime'}
yAxis = {"title": {"text": 'Liter'}}
return render_template('chart.html', chartID=chartID, chart=chart, series=series, charttitle=charttitle, xAxis=xAxis,
yAxis=yAxis)
if __name__ == '__main__':
app.run(debug=True)