Hallo Zusammen,
ich frag jetzt eine kleine sqlite Datenbank in Tkinter mit vier Comboboxen ab. Also eine Box für Stunde, Tag, Monat und Jahr.
Im Moment frage ich per IF alle 16 Möglichkeiten ab. Das geht auch, aber geht das vielleicht einfacher mit einer Schleife oder so?
Ich hoffe ich hab mich verständlich ausgedrückt.
Danke, wenn einer nen Tipp hat :K
Daten filtern
uff.. das wird trotzdem schwer verständlich...
von diesen if Abfragen hab ich halt 16
Code: Alles auswählen
sql = "SELECT einschaltzeit, id FROM touren ORDER BY einschaltzeit"
cursor.execute(sql, )
result = cursor.fetchall()
for zaehler in result:
if gesuchte_stunde == "n. a." and\
gesuchter_tag == "n. a." and\
gesuchter_monat == "n. a." and\
gesuchtes_jahr == "n. a.":
self.ausgabe.insert("end", "Bitte etwas auswählen...")
break
# ------------------------------------------------------------------
if(str("{:02d}".format(zaehler[0].hour)) == gesuchte_stunde) and\
gesuchter_tag == "n. a." and\
gesuchter_monat == "n. a." and\
gesuchtes_jahr == "n. a.":
treffer.append(zaehler[1])
continue
Die erste if-Abfrage sollte ja schon vor dem execute stehen, weil die ja einen Fehlerfall darstellt. Statt hour in einen String unzuwandeln solltest Du gesuchte_stunde in eine Zahl wandeln.
Also im vorhinein:
und in der Schleife einfach auf None oder Zahl prüfen:
Die \ sind überflüssig, da durch Klammerung schon klar ist, dass die Zeile weitergeht, str auf einen String aufzurufen ist überflüssig, continue vermeiden, da es den Programmablauf sehr undurchsichtig macht, bei Deinen vielen if solltest Du daher elif verwenden.
Also im vorhinein:
Code: Alles auswählen
gesuchte_stunde = None if gesuchte_stunde == 'n.a.' else int(gesuchte_stunde)
gesuchte_tag = None if gesuchte_tag == 'n.a.' else int(gesuchte_tag)
gesuchte_monat = None if gesuchte_monat == 'n.a.' else int(gesuchte_monat)
gesuchte_jahr = None if gesuchte_jahr == 'n.a.' else int(gesuchte_jahr)
if gesuchte_stunde == gesuchte_tag == gesuchte_monat == gesuchte_jahr == None:
self.ausgabe.insert("end", "Bitte etwas auswählen...")
return
Code: Alles auswählen
cursor.execute(sql, )
for einschaltzeit, id in cursor:
if (gesuchte_stunde in (None, einschaltzeit.hour)
and gesuchter_tag in (None, einschaltzeit.day)
and gesuchter_monat in (None, einschaltzeit.month)
and gesuchtes_jahr in (None, einschaltzeit.year)):
treffer.append(id)