@bst2k: die StationsID ist also gar keine ID, sondern ein Name, der für verschieden Standorte mehrfach vorkommen kann. Die Standorte sind die Variable, die Du in den Tabellennamen kodiert hast.
Dann verstehe ich aber nicht, woher ›staID‹ kommt?
Die Tabelle sollte also den Aufbau haben:
Datum, Standort, StationsID, Umsatz
Was sind denn die anderen sieben Felder, die Du hier per Index ansprichst?
Zum Code: wie __blackjack__ schon geschrieben hat, ist es total umständlich, eine Liste zu haben, in der die Daten stehen und eine zweite, wo die Anzahl der zusammengehörigen Einträge steht. Dafür nimmt man eine Liste, in der wieder Listen mit den Daten sind.
Eingerückt wird immer mit 4 Leerzeichen pro Ebene, nicht mal 4 und mal 8.
Variablennamen werden klein_mit_unterstrich geschrieben, und sind aussagekräftig. ›d‹ ist das definitiv nicht, und eine Variable, die ›Spam‹ im Namen hat, ...
Was soll das my bei ›mycursor‹? Gibt es auch noch einen yourcursor? Der Cursor kann vor der for-Schleife einmal erzeugt werden.
Was ist mit den letzten 10 Sekunden jeden Tages?
Für Variablen in SQL-Statements nimmt man Platzhalter. Das geht natürlich nicht für Tabellennamen, weil man ja auch keine variablen Tabellennamen benutzt.
Keinen * im SELECT und auch keine magischen Indexwerte im Programmcode. Statt dessen kann man die Einträge in Variablen entpacken.
Man vergleicht nicht explizit mit True oder False, sondern nimmt einfach die Variable, die ja schon einen Wahrheitswert darstellt oder dreht den Wert mit ›not‹ um.
Du gehst implizit davon aus, dass die Einträge aus der Datenbank immer in aufsteigender zeitlicher Reihenfolge geliefert werden. Das ist falsch. Sie kommen zufällig.
Die Tabelle ›station‹ scheint den Wert der an Index 9 steht zu enthalten und davor noch irgendwas das aus 3, 4 und 6 zusammengesetzt wird. Das ist wieder soetwas was man einfach nicht macht. Tabellen enthalten nur gleichartige Dinge. Wenn jedes x-te Element etwas anderes bedeutet, macht das die Verarbeitung sehr kompliziert und fehleranfällig.
Wenn ich raten soll, dann willst Du für jeden Standort und jede Station eine Liste mit den Umsätzen haben. Das bedeutet, Du mußt Deine Datenbankstruktur und Deine interne Datenrepräsentation genau auf diese Fragestellung anpassen:
Code: Alles auswählen
start_datum = datetime.datetime(2019, 8, 6)
end_datum = datetime.datetime(2019, 9, 6, 23, 59, 49)
cursor = mysql.get_db().cursor()
stationen_umsatz = defaultdict(list)
zeiten = []
cursor.execute("SELECT standort, station, datum, umsatz FROM umsatz WHERE datum BETWEEN %s AND %s ORDER BY datum", [start_datum, end_datum])
for standort, station, datum, umsatz in cursor:
if not zeiten or zeiten[-1] != datum:
# TODO: ensure, that the same times exist for each station.
zeiten.append(datum)
stationen_umsatz[standort, station].append(umsatz)
return render_template('test.html', zeiten=zeiten, stationen_umsatz=stationen_umsatz)
Nun hast Du ein Wörterbuch, dessen Schlüssel Standort und Station ist und dessen Werte eine Liste mit Umsätzen. Dieses Wörterbuch kannst Du nun einfach im Jinja-Template durchgehen und anzeigen.