auf pythonanywhere.com läuft von mir eine kleine APP (flask).
Die APP verwaltete Aufgaben nach Datum und Schwerpunkten. (vereinfacht ausgedrückt)
Über die APP wird der Monat ausgewählt und die Daten werden mit Python für die HTML-Ausgaben aufbereitet.
Die Daten werden in Form einer Tabelle in HTML ausgegeben:
| ------ | Datum 1 | Datum 2 |
| Schwerpunkt 1 | Aufgabe 1 | Aufgabe 3 |
| Schwerpunkt 2 | Aufgabe 2 | Aufgabe 4 |
Problem
Leider dauert die HTML-Ausgabe, wegen den vielen Feldern in der Tabelle und daraus resultierenden Datenbankzugriffen, länger als mir lieb ist.
(Datenbank-Anfragebeschränkung seitens pythonanywhere.com)
Anbei der vereinfachte APP-Code
Code: Alles auswählen
class Schwerpunkte(db.Model):
id = db.Column(db.Integer, primary_key = True)
name = db.Column (db.String, nullable=False)
class Datum(db.Model):
id = db.Column(db.Integer, primary_key = True)
tag = db.Column (db.Integer, nullable=False)
monat = db.Column(db.Integer, nullable=False)
class Aufgaben(db.Model):
id = db.Column(db.Integer, primary_key=True)
text = db.Column(db.String, nullable=False)
schwerpunkt_id = db.Column(db.Integer, nullable=False)
datum_id = db.Column(db.Integer, nullable=False)
Wegen der großen Datenmenge wurde die Datenbank bewusst ohne Relationships aufgebaut.
Code: Alles auswählen
dict_html_tabelle = defaultdict(
lambda = defaultdict(list)
)
for tag in Datum.query.filter_by(monat = 12).all()
list_aufgaben = []
for schwerpunkt in Schwerpunkte.query.all()
aufgabe = Aufgaben.query.filter_by(schwerpunkt_id = schwerpunkt.id, datum_id = tag.id
list_aufgaben.append(aufgabe.text)
dict_html_tabelle[tag.id][schwerpunkt.id] = list_aufgaben
Meine Frage
wie kann ich die zwei Schleifen (Datum und Schwerpunkte) verbinden um die Anzahl der Datenbankzugriffe auf die Tabelle Aufgaben zu minimieren?
Eine Lösung wäre die Verbindung der Tabellen (Schwerpunkte, Datum, Aufgaben) über Relationships.
Wie kann ich dann in der Query die Datenmenge begrenzen?
Problembeispie - Datenbank mit Relationships
Datenbankstruktur:
[ Land ]-1---n-[ Bundesland ]-1----n-[ Stadt ]-1----n-[ Straße ]-1----n-[ Hausnummer]-1---n-[ Stock ]-1----n-[ Zimmer ]-1---n-[ Lichtschalter ]
Wenn nur die Bundesländer eines Landes gefragt sind, dann erhalte ich diese mittels Relationship folgendermaßen:
land = Land.query.get(1)
bundeslaender = land.bundeslaender
Im Hinblick auf die umfangreiche Datenbank-Verknüpfung (von Land bis Lichtschalter) erscheint mir diese einfache Abfrage als nicht sehr sinnvoll.
Vielen Dank!
MfG
Jora