Abfrage SQlite Datenbank

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
sveni_lee
User
Beiträge: 92
Registriert: Montag 14. März 2016, 09:50

BlackJack hat geschrieben: Die SQL-Abfrage ergibt mehr als 22 Daten pro Datensatz? Wie das? Welche denn ausser den 22 Spaltennamen die in `properties` stehen denn noch?
ich habe ja noch 3 weitere Felder eingefügt im datetime-format diese gebe ich aber nicht aus, da sie nur zur Berechnung dienen...
Das mit dem `field` und `item` klang jetzt schon wieder geraten.
ear es aber dieses mal nicht
ich habe mir die beiden werte mal in einem debug ausgeben lassen...
Alles was einem so über den Weg läuft was man nicht versteht, muss man dann nachlesen und sich erarbeiten, wenn man darüber stolpert. Du hättest Dir zum Beispiel zusätzlich zu den Grundlagen längst mal die `zip()`-Funktion und `dict()` anschauen müssen. Also die Dokumentation und dann mindestens in einer Python-Shell mal ein paar Beispiele ausprobieren müssen. Das sind Erfahrungen die Dir auch niemand anders abnehmen kann. Nur so lernt man mit diesen Werkzeugen umzugehen.
aber genau das mach ich doch... Ich lasse so gut wie alle Ausdrücke mal in einem debug anzeigen um zu sehen, wie diese aussehen...

bspw:

innerhalb der Schleife:

Code: Alles auswählen

writeLog('Anzeige field data: %s %s ' % (field, item), level=xbmc.LOGDEBUG)
Ausgabe

Code: Alles auswählen

15:59:55 T:6984 DEBUG: [plugin.program.serienplaner 0.0.1]: Anzeige field data: TVShow Peaky Blinders - Gangs of Birmingham
15:59:55 T:6984 DEBUG: [plugin.program.serienplaner 0.0.1]: Anzeige field data: Staffel 2
15:59:55 T:6984 DEBUG: [plugin.program.serienplaner 0.0.1]: Anzeige field data: Episode 6
15:59:55 T:6984 DEBUG: [plugin.program.serienplaner 0.0.1]: Anzeige field data: Title Das Attentat
15:59:55 T:6984 DEBUG: [plugin.program.serienplaner 0.0.1]: Anzeige field data: Starttime 15:00
15:59:55 T:6984 DEBUG: [plugin.program.serienplaner 0.0.1]: Anzeige field data: Datum 13.04.2016
15:59:55 T:6984 DEBUG: [plugin.program.serienplaner 0.0.1]: Anzeige field data: neueEpisode
15:59:55 T:6984 DEBUG: [plugin.program.serienplaner 0.0.1]: Anzeige field data: Channel Sky Atlantic+1 HD
15:59:55 T:6984 DEBUG: [plugin.program.serienplaner 0.0.1]: Anzeige field data: Logo
15:59:55 T:6984 DEBUG: [plugin.program.serienplaner 0.0.1]: Anzeige field data: PVRID 59
15:59:55 T:6984 DEBUG: [plugin.program.serienplaner 0.0.1]: Anzeige field data: Description Der Tag des Derbys in Epsom ist gekommen und Tommy Shelby soll nun die Abmachung mit Campbell einlösen. Tommy hat einen geheimen Plan und versammelt seine Gang bei dem berühmten Pferderennen in der Nähe von London.
15:59:55 T:6984 DEBUG: [plugin.program.serienplaner 0.0.1]: Anzeige field data: Rating 8.3
15:59:55 T:6984 DEBUG: [plugin.program.serienplaner 0.0.1]: Anzeige field data: Altersfreigabe TV-14
15:59:55 T:6984 DEBUG: [plugin.program.serienplaner 0.0.1]: Anzeige field data: Genre Crime | Drama
15:59:55 T:6984 DEBUG: [plugin.program.serienplaner 0.0.1]: Anzeige field data: Studio BBC Two
15:59:55 T:6984 DEBUG: [plugin.program.serienplaner 0.0.1]: Anzeige field data: Status Continuing
15:59:55 T:6984 DEBUG: [plugin.program.serienplaner 0.0.1]: Anzeige field data: Jahr 2013
15:59:55 T:6984 DEBUG: [plugin.program.serienplaner 0.0.1]: Anzeige field data: Thumb http://www.thetvdb.com/banners/episodes/270915/5008794.jpg
15:59:55 T:6984 DEBUG: [plugin.program.serienplaner 0.0.1]: Anzeige field data: FirstAired 2014-11-06
15:59:55 T:6984 DEBUG: [plugin.program.serienplaner 0.0.1]: Anzeige field data: RunningTime 60
15:59:55 T:6984 DEBUG: [plugin.program.serienplaner 0.0.1]: Anzeige field data: Poster http://thetvdb.com/banners/posters/270915-7.jpg
15:59:55 T:6984 DEBUG: [plugin.program.serienplaner 0.0.1]: Anzeige field data: WatchType Internationale Serien
von daher meine Idee eine Dict aus beiden werten zu erzeugen...

in der selben Schleife dann folgendes getestet:

Code: Alles auswählen

writeLog('Anzeige: %s ' % (zip(properties, data)), level=xbmc.LOGDEBUG)
Ausgabe:

Code: Alles auswählen

16:02:08 T:3976 DEBUG: [plugin.program.serienplaner 0.0.1]: Anzeige: [('TVShow', u'Raumschiff Enterprise - Das n\xe4chste Jahrhundert'), ('Staffel', u'2'), ('Episode', u'13'), ('Title', u'Die Zukunft schweigt'), ('Starttime', u'15:08'), ('Datum', u'13.04.2016'), ('neueEpisode', u''), ('Channel', u'TELE 5 HD'), ('Logo', u'image://G%3a%5cKodi%5cSenderlogos%5ctele%205%20hd.png/'), ('PVRID', u'47'), ('Description', u'Die Enterprise holt ein havariertes Shuttle der Sternenflotte an Bord. Zu aller Erstaunen befindet sich ein bewusstloser Doppelg\xe4nger von Captain Picard in dem Schiff. Es stellt sich heraus, dass das Double aus der Zukunft stammt. Sein Logbuch berichtet von der Zerst\xf6rung der Enterprise.'), ('Rating', u'7.3'), ('Altersfreigabe', u'TV-PG'), ('Genre', u'Action | Adventure | Drama | Science-Fiction'), ('Studio', u'Syndicated'), ('Status', u'Ended'), ('Jahr', u'1987'), ('Thumb', u'http://www.thetvdb.com/banners/episodes/71470/46546.jpg'), ('FirstAired', u'1989-04-03'), ('RunningTime', u'57'), ('Poster', u'http://thetvdb.com/banners/posters/71470-5.jpg'), ('WatchType', u'Klassiker')]
16:02:08 T:3976 DEBUG: Previous line repeats 21 times.
und zu guterletzt das dict

Code: Alles auswählen

writeLog('Anzeige: %s ' % (dict(zip(properties, data))), level=xbmc.LOGDEBUG)
Anzeige:

Code: Alles auswählen

16:06:03 T:6664 DEBUG: [plugin.program.serienplaner 0.0.1]: Anzeige: {'neueEpisode': u'', 'Thumb': u'http://www.thetvdb.com/banners/episodes/78890/298277.jpg', 'Title': u'Verzweiflungstat', 'Jahr': u'2002', 'Staffel': u'1', 'TVShow': u'Spooks - Im Visier des MI5', 'Channel': u'AXN HD', 'Status': u'Ended', 'Description': u'US-Pr\xe4sident Bush wird zu einem Staatsbesuch in London erwartet, was auch eine gro\xdfe Anzahl von Globalisierungsgegnern in die Stadt zieht. Bei der Observation von Demonstranten f\xe4llt Danny und Zoe ein Mann auf, der hier eigentlich nichts zu suchen hat: Peter Salter geh\xf6rt zum MI-5. Harry Pearce kl\xe4rt seine verwunderten Agenten schlie\xdflich auf. Salter wurde in die linke Szene eingeschleust, um den Anarchistenf\xfchrer Istvan Vogel dingfest zu machen. Schon bald mehren sich allerdings die Hinweise, dass Salter die Seiten gewechselt hat ...', 'Poster': u'http://thetvdb.com/banners/posters/78890-5.jpg', 'FirstAired': u'2002-06-04', 'Studio': u'BBC One', 'Genre': u'Drama | Thriller', 'Episode': u'4', 'Starttime': u'15:10', 'Altersfreigabe': u'TV-MA', 'Rating': u'7.4', 'WatchType': u'Klassiker', 'Datum': u'13.04.2016', 'RunningTime': u'60', 'Logo': u'image://G%3a%5cKodi%5cSenderlogos%5caxn%20hd.png/', 'PVRID': u'16'}
16:06:03 T:6664 DEBUG: Previous line repeats 21 times.
Meine Erkenntniss daraus:

was macht zip: zip nimmt die inhalte aus meinem Liste ``properties`` und die dazugehörigen werte ``data`` aus der SQL-Abfrage und packt diese zusammen (darum auch zip wie ziooer oder reisverschluß)

was macht dict: dict bildet aus den in zip enthaltenen "Werte Paaren" ein Wörterbuch oder auch dictionary

was macht append: bildet wieder eine Liste aus den Wörterbüchern und hängt die an listitems an...

Ich versuche ja mich Schritt für Schritt der sache zu nähern... Ich glaube auch verstanden zuhaben warum das Progrmm das ganze 22x macht ABER ich habe im Moment noch keinen Lösungsansatz

Nebenbei: einen C64 und C128 hatte ich auch noch etwas später nachdem diese für mich zugänglich waren
sveni_lee
User
Beiträge: 92
Registriert: Montag 14. März 2016, 09:50

also da hätte ich mir jetzt fast einen Wolf gesucht...

Der Fehler lag nicht in den Scheifen ansich, sondern in der ebene in der ich die Ausgabe eingbaut hatte.
Habe die Ausgabe ketzt in eine ebene höher also die über geordnete Schleige gepackt und schon ging es..

Im nachhinaein betrachtet ist das aber auch logisch... :K
BlackJack

Deine Beschreibung von `append()` ist falsch. Bildet eine Liste aus Wörterbüchern? Welche Wörterbücher?

Mit ausprobieren meine ich nicht in Deinem Programm und Ausgabe per Logging sondern ganz grundsätzlich mit irgendwelchen Beispieldaten *live* ausprobieren bis man es verstanden hat. So wirklich *ganz grundlegende* Sachen.

Code: Alles auswählen

In [1]: properties = ['a', 'b', 'c']

In [2]: data = [1, 2, 3]

In [3]: result = list()

In [4]: zip(properties, data)
Out[4]: [('a', 1), ('b', 2), ('c', 3)]

In [5]: dict(zip(properties, data))
Out[5]: {'a': 1, 'b': 2, 'c': 3}

In [6]: result.append(dict(zip(properties, data)))

In [7]: result
Out[7]: [{'a': 1, 'b': 2, 'c': 3}]
Wo hat `append()` da jetzt eine Liste gebildet und die an `result()` angehängt?

Erst wenn man `append()` mehrfach mit gleichem Argument aufruft wird auch mehrfach das gleiche Argument an die Liste angehängt. Womit wir wieder bei der ganz einfachen Lösung wären, die ich ja auch schon längst verraten hatte: Ruf `append()` nur einmal pro Datensatz auf und nicht mehrfach.
sveni_lee
User
Beiträge: 92
Registriert: Montag 14. März 2016, 09:50

ich habe nocheinmal eine kleine Frage :-)

könnte ich anstatt des ``returns listitems`` auch ein ``global listitems`` machen?
damit listitems global zu Verfügung stehen würde?
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

sveni_lee hat geschrieben:könnte ich anstatt des ``returns listitems`` auch ein ``global listitems`` machen?
damit listitems global zu Verfügung stehen würde?
Könntest du machen aber der Code wäre halt dann schlecht.
sveni_lee
User
Beiträge: 92
Registriert: Montag 14. März 2016, 09:50

funktioniert leider auch nicht so wie ich wolte...
Antworten