Anzahl der Datenbankzugriffe minimieren

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Jora
User
Beiträge: 17
Registriert: Mittwoch 26. Dezember 2018, 13:54

Montag 8. Juli 2019, 17:00

ja, nur das Handling mit dem datetime ist mir nicht so geläufig..
__deets__
User
Beiträge: 6422
Registriert: Mittwoch 14. Oktober 2015, 14:29

Montag 8. Juli 2019, 17:04

Dann uebst du das halt - ist keiner mit geboren worden. Davon das du es vermeidest wird's jedenfalls nicht besser.
Benutzeravatar
__blackjack__
User
Beiträge: 4247
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Montag 8. Juli 2019, 17:25

@Jora: Das Filterkriterium das der Tag >= 1 und <= 31 sein soll sieht komisch aus. Fast so als würdest Du erwarten, dass da tatsächlich Zahlen ausserhalb dieses Bereichs vorkommen könnten. 😮

Die Namen `Schwerpunkte` und `Aufgaben` sind übrigens falsch. So eine Klasse und ein Objekt davon repräsentieren *einen* `Schwerpunkt` und *eine* `Aufgabe`.

`and_()` ist überflüssig. Statt auf Ober- und Untergrenze mit zwei Tests zu prüfen kennen sowohl SQL als auch SQLAlchemy BETWEEN/`between()`.
Ungetestet:

Code: Alles auswählen

aufgaben = db.session.query(Schwerpunkt, Datum, Aufgabe).filter(
    Schwerpunkt.id.between(1, 7),
    Schwerpunkt.id == Aufgabe.schwerpunkt_id,
    Datum.monat ==  2,
    Datum.id == Aufgabe.datum_id,
)
“Give a man a fire and he's warm for a day, but set fire to him and he's warm for the rest of his life.”
— Terry Pratchett, Jingo
Jora
User
Beiträge: 17
Registriert: Mittwoch 26. Dezember 2018, 13:54

Montag 8. Juli 2019, 18:11

@__deets__: ich habe es bis jetzt nur vermieden, weil es viele andere Baustellen gibt. Es ist nicht so, dass ich dem generell aus dem Weg gehe möchte. Bei der aktuellen APP lag der Fokus auf flask, sqlalchemy usw. um eine lauffähige APP auf die Beine stellen zu können. In der nächsten APP wird die db.Datum entfallen!

@__blackjack__ : jop. war auch nur ein schneller Schuß. In der App wird mit *Datum.tag.in_(list_tage)* der Filter eingegrenzt.
In der aktuellen App habe ich alle Models in Mehrzahl benannt. Gerade bei for-Schleifen beware ich so einen Überblick:

Code: Alles auswählen

schwerpunkte = Schwerpunkte.query.all()
for schwerpunkt in schwerpunkte:
  print(schwerpunkt.name)
Problem gelöst!
Die Ladezeit der HTML-Tabelle wurde von 5 Sec. auf 1 Sec. verbessert!

Vielen Dank Euch!
Sirius3
User
Beiträge: 10598
Registriert: Sonntag 21. Oktober 2012, 17:20

Montag 8. Juli 2019, 18:25

Das es sich um Mehrzahl handelt, ist ja bei ›schwerpunkte‹ so. Die Klasse an sich, kann und sollte aber trotzdem ›Schwerpunkt‹ heißen.
Antworten