Daten filtern

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
onkelhamu
User
Beiträge: 20
Registriert: Freitag 20. Oktober 2017, 21:07

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
nezzcarth
User
Beiträge: 1633
Registriert: Samstag 16. April 2011, 12:47

Es ist einfacher, wenn du einfach zeigst, was du schon hast. Nur dann kann man konkrete Vorschläge machen.
onkelhamu
User
Beiträge: 20
Registriert: Freitag 20. Oktober 2017, 21:07

uff.. das wird trotzdem schwer verständlich...

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
von diesen if Abfragen hab ich halt 16
Sirius3
User
Beiträge: 17738
Registriert: Sonntag 21. Oktober 2012, 17:20

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:

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
und in der Schleife einfach auf None oder Zahl prüfen:

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)
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.
onkelhamu
User
Beiträge: 20
Registriert: Freitag 20. Oktober 2017, 21:07

:D Boah , so einfach!!
Und etliche Sachen drin, die mir so nicht klar waren das das geht!

Tausend Dank
Antworten