ListCtrl - Inhalte aus SQLite-Datenbanktabelle

Plattformunabhängige GUIs mit wxWidgets.
Antworten
Dwayne
User
Beiträge: 8
Registriert: Freitag 16. Februar 2007, 12:00

Ich habe mich in den letzten Tagen mit SQLite beschäftigt und dachte mir als Übung eine kleine Anwendung mit wxPython zu programmieren. Vor dieser Anwendung habe ich die Daten zwecks Verständnis per Hand und ohne GUI gespeichert und wieder ausgelesen.

In der letztendlichen GUI gibt es die Option, Vorname und Nachname in der Datenbank zu speichern. Der Anwender gibt diese Werte in zwei TextCtrl-Felder ein und auf Knopfdruck werden eine ID, der Vor- und der Nachname in der Datenbank gespeichert.

Das Speichern ist auch nicht das Problem. Was mir Probleme bereitete, war das Auslesen dieser Daten. Ich habe hier in Forum ein Beispiel gefunden, bin daraus jedoch doch nicht schlau geworden.

Die erstellte Liste:

Code: Alles auswählen

        self.list = wx.ListCtrl(panel, -1, style=wx.LC_REPORT)
        self.list.InsertColumn(0, 'ID')
        self.list.InsertColumn(1, 'Vorname')
        self.list.InsertColumn(2, 'Nachname')
Der Ausleseprozess auf Knopfdruck. Hier wird die Ausgabe in der Konsole ausgegeben:

Code: Alles auswählen

        conn = sqlite.connect("testdb.db")

        sql ="""
             SELECT
                 *
             FROM
                 test
             """
        cur = conn.cursor()
        cur.execute(sql)
        rows = cur.fetchall()
        
        for row in rows:
            ID, vorname, nachname = row
            print "ID:", ID
            print "Vorname:", vorname
            print "Nachname:", nachname
In dem verlinkten Beispiel von oben ist ja auch gut zu sehen, wie man die Liste per Hand füllen könnte, was mir nun aber nicht klar ist, wie bekomme die Daten aus der SQL-Abfrage in die Liste?
Jan-Peer
User
Beiträge: 166
Registriert: Dienstag 2. Oktober 2007, 10:55

Ich bin mir gerade nicht sicher, was du mit 'liste' meinst. Wenn du das dict 'musicdata' meinen solltest: Es geht auch ohne - schließlich hast du aus der Abfrage heraus ja schon eine Sequenz, die du verwenden kannst / mußt.

Es mag keine hohe (wx)Python-Kunst sein, aber ich habe es in einem meiner Programme so gelöst:

Code: Alles auswählen

for c in self.daten:
            index = self.listeAktionen.InsertStringItem(sys.maxint, c.get_title())
            self.listeAktionen.SetStringItem(index, 1, str(c.get_article()))
            self.listeAktionen.SetStringItem(index, 2, c.get_begin().strftime("%d.%m.%Y"))
            self.listeAktionen.SetStringItem(index, 3, c.get_end().strftime("%d.%m.%Y"))
Die Spalten 0-3 habe ich im ListCtrl natürlich vorher angelegt, wie du es in deinem oberen Codeschnipsel ja auch schon gemacht hast. In meinem Fall handelt es sich um eine Sequenz von Objekten, die ich in das ListCtrl einspeise, aber der Code lässt sich ja ohne weiteres für Sequenzen von Sequenzen umschreiben.

Hoffentlich hilfts dir ein wenig weiter.
Dwayne
User
Beiträge: 8
Registriert: Freitag 16. Februar 2007, 12:00

Danke, ich habs jetzt hinbekommen... :D

Code: Alles auswählen

        sql = 'SELECT * FROM test'
        
        conn = sqlite.connect("testdb.db")
        cur = conn.cursor()
        cur.execute(sql)
        
        resultset = cur.fetchall()
        cur.close()
        conn.close()

        for i in resultset:
            index = self.list.InsertStringItem(sys.maxint, (strip(str(i[0]))))
            self.list.SetStringItem(index, 1, i[1])
            self.list.SetStringItem(index, 2, i[2])
Antworten