Flask Routing mit SQLite und Highcharts

Django, Flask, Bottle, WSGI, CGI…
Antworten
Tschili
User
Beiträge: 2
Registriert: Sonntag 28. Oktober 2018, 11:46

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:

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)
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@Tschili: ließ doch in der Dokumentation, wie man dynamische Daten einbindet: https://www.highcharts.com/docs/working ... /live-data

Zum Code: statt der zwei for-Schleifen würde auch eine reichen. SELECT braucht kein commit, weil sie ja nichts an den Daten ändert.
Antworten