2012-04-04 6 views
1

Ich habe einen großen Datensatz (Protokolldaten), der in einer SQLite3-Datenbank gespeichert ist. Ich habe eine Python-GUI mit Wx.listctrl erstellt, die diese Daten aus einer Abfrage anzeigt. Es funktioniert gut für kleine Mengen von Daten, aber hängt offensichtlich auf größeren Sets .. daher würde ich gerne eines von zwei Dingen implementieren:Anzeige eines großen Datensatzes aus der Sqlite-Datenbank in Python wx

-paging waren die ersten 5000 Datensätze werden in der Listctrl angezeigt und dann, wenn ein Benutzer ein klickt Taste werden die nächsten 5000 .. so weiter und so weiter gezeigt .. OR -wie die Benutzer blättert durch das ListCtrl seine ständig mit neuen Daten bevölkern ..

Wie würde ich eines dieser Konzepte umzusetzen? Vielen Dank im Voraus für die Hilfe!

Antwort

1

Machen Sie es zu einem virtuellen Steuerelement wie in the docs beschrieben. Die Listenansicht ruft bei Bedarf einen Rückruf auf, um die angezeigten spezifischen Zeilen anzufordern.

0

In verschiedenen Szenarien werden die Strategien unterschiedlich sein. Die Annahme ist, dass Sie wxPython nur zu Präsentationszwecken verwenden, und Sie haben ein separates Modul/Paket, das sich mit den Daten beschäftigt. WxPython-Steuerelemente erhalten Daten nur von der Datenabstraktionsschicht.

Szenario I: Laden Sie alle Protokolldaten in den Speicher und verwenden Sie wx.listctrl oder wx.listview, um die Zeilen anzuzeigen.

Szenario II: Abrufen von Daten aus der Datenbank, wenn die wx-Ansicht aktualisiert wird.

In Szenario I müssen Sie nur eine Variable einrichten, um sich an die Position zu erinnern, die die UI gelesen hat, oder Sie können einfach die Liste gleiten, wenn Sie die Protokolle als Liste laden. Das automatische Aktualisieren der Ansicht durch Scrollen nach unten/oben kann in Szenario I implementiert werden, da alle Daten geladen wurden und keine sqlite db-Verbindung mehr hergestellt wird. Es wird eine schlechte Wahl sein, die automatische Aktualisierung zu implementieren, indem Sie in Szenario II nach unten/oben scrollen, da es zu viele db-Operationen geben würde - stellen Sie sich vor, Sie scrollen sehr schnell und erwarten die 5000ste Zeile?

In Szenario II können Sie eine Seitengröße einrichten und LIMIT/OFFSET verwenden, um den gewünschten Datensatz zu erhalten. Sie behalten eine andere Variable für die Offset-Nummer. Mit den Variablen page_size und offset können Sie einfach die Daten abrufen und die wx-Ansicht aktualisieren. Dieses Szenario eignet sich besonders zur Begrenzung der Speicherbelegung. Ich weiß nicht, wie groß Ihr Protokoll ist, aber schließlich ist es keine gute Idee, alles in den Speicher zu laden, weil ein Protokoll weiter wächst und Sie möglicherweise auch andere relativ große Datenmengen gleichzeitig laden müssen.

+0

Ich bin auf der Suche nach einem Tutor, den ich bezahlen werde, um mir etwas von diesem Zeug (via Webex) zu lehren .. Es dauert nur zu lange, um dieses Zeug auf eigene Faust zu tun und ich brauche eine Richtung .. obv for Pay . bist du interessiert? – user1314011

+0

Es tut mir leid zu sagen, dass ich zu beschäftigt bin, um dein Tutor zu sein. Ich bin sicher, du wirst jemanden neben dir finden, der gut in wxPython ist. Danke für die Frage ;-) – user866903

Verwandte Themen