Abfrage SQlite Datenbank
@sveni_lee: dass man statt copy-paste besser eine Schleife benutzt, hab ich Dir ja schon gesagt. JSON sollte man auch nit per String-Formatierung erzeugen. Du solltest Deine Variablennamenschreibweise an die Konvention anpassen, was ist denn WINDOW und wie wird das gefüllt?
bis jezuz habe ich davon noch gar nichts benutz...
das was dort als Code steht, kommt aus einem anderen Plugin, nicht von mir... Das macht halt genau das
was ich möchte...
Die Ganze JSON Geschichte benörige ich in dem Fall gar nicht, da mein Abglaich mit der Datenbankt anders erfolgen soll...
WINDOW.getProperty holt die gesetzten Propertys aus einem Plugin... in meinem werden die Propertya ja hier
befüllt:
normaler Weise werden die Properties innerhalb eines Skins dann als Kontent abgerufen...
ich nöchte das ganze nun etwas vereinfachen und ohne diese Items innerhalb des Inculdes auskommen in dem ich den Inhat über einen Programmaufruf abfrage...
Ich hoffe das war jetzt etwas verständlicher...
das was dort als Code steht, kommt aus einem anderen Plugin, nicht von mir... Das macht halt genau das
was ich möchte...
Die Ganze JSON Geschichte benörige ich in dem Fall gar nicht, da mein Abglaich mit der Datenbankt anders erfolgen soll...
WINDOW.setProperty... setzt ja die jeweiligen Items die dann im jeweiligen Skin in KODI aufgerufen werden...Sirius3 hat geschrieben:was ist denn WINDOW und wie wird das gefüllt?
WINDOW.getProperty holt die gesetzten Propertys aus einem Plugin... in meinem werden die Propertya ja hier
befüllt:
Code: Alles auswählen
WINDOW.setProperty('SerienPlaner.%d.%s' % (idx, field), item)
Code: Alles auswählen
<include name="SerienPlanerContent">
<item>
<property name="channel">$INFO[Window.Property(SerienPlaner.0.Channel)]</property>
<property name="poster">$INFO[Window.Property(SerienPlaner.0.Poster)]</property>
<property name="plot">$INFO[Window.Property(Serienplaner.0.Description)]</property>
<property name="staffel">$INFO[Window.Property(SerienPlaner.0.Staffel)]</property>
<property name="episode">$INFO[Window.Property(SerienPlaner.0.Episode)]</property>
<property name="starttime">$INFO[Window.Property(SerienPlaner.0.Starttime)]</property>
<property name="rating">$INFO[Window.Property(SerienPlaner.0.Rating)]</property>
<property name="senderlogo">$INFO[Window.Property(SerienPlaner.0.Logo)]</property>
<property name="genre">$INFO[Window.Property(SerienPlaner.0.Genre)]</property>
<property name="date">$INFO[Window.Property(SerienPlaner.0.Datum)]</property>
<property name="runtime">$INFO[Window.Property(SerienPlaner.0.RunningTime)]</property>
<property name="studio">$INFO[Window.Property(SerienPlaner.0.Studio)]</property>
<property name="year">$INFO[Window.Property(SerienPlaner.0.Jahr)]</property>
<property name="altersfreigabe">$INFO[Window.Property(SerienPlaner.0.Altersfreigabe)]</property>
<property name="status">$INFO[Window.Property(SerienPlaner.0.Status)]</property>
<label>$INFO[Window.Property(SerienPlaner.0.Title)]</label>
<label2>$INFO[Window.Property(SerienPlaner.0.TVShow)]</label2>
<thumb>$INFO[Window.Property(SerienPlaner.0.Thumb)]</thumb>
<icon>$INFO[Window.Property(SerienPlaner.0.Poster)]</icon>
<visible>!IsEmpty(Window.Property(SerienPlaner.0.TVShow))</visible>
</item>
<item>
<property name="channel">$INFO[Window.Property(SerienPlaner.1.Channel)]</property>
<property name="poster">$INFO[Window.Property(SerienPlaner.1.Poster)]</property>
<property name="plot">$INFO[Window.Property(Serienplaner.1.Description)]</property>
<property name="staffel">$INFO[Window.Property(SerienPlaner.1.Staffel)]</property>
<property name="episode">$INFO[Window.Property(SerienPlaner.1.Episode)]</property>
<property name="starttime">$INFO[Window.Property(SerienPlaner.1.Starttime)]</property>
<property name="rating">$INFO[Window.Property(SerienPlaner.1.Rating)]</property>
<property name="senderlogo">$INFO[Window.Property(SerienPlaner.1.Logo)]</property>
<property name="genre">$INFO[Window.Property(SerienPlaner.1.Genre)]</property>
<property name="date">$INFO[Window.Property(SerienPlaner.1.Datum)]</property>
<property name="runtime">$INFO[Window.Property(SerienPlaner.1.RunningTime)]</property>
<property name="studio">$INFO[Window.Property(SerienPlaner.1.Studio)]</property>
<property name="year">$INFO[Window.Property(SerienPlaner.1.Jahr)]</property>
<property name="altersfreigabe">$INFO[Window.Property(SerienPlaner.1.Altersfreigabe)]</property>
<property name="status">$INFO[Window.Property(SerienPlaner.1.Status)]</property>
<label>$INFO[Window.Property(SerienPlaner.1.Title)]</label>
<label2>$INFO[Window.Property(SerienPlaner.1.TVShow)]</label2>
<thumb>$INFO[Window.Property(SerienPlaner.1.Thumb)]</thumb>
<icon>$INFO[Window.Property(SerienPlaner.1.Poster)]</icon>
<visible>!IsEmpty(Window.Property(SerienPlaner.1.TVShow))</visible>
</item>
</include>
Ich hoffe das war jetzt etwas verständlicher...
Ich möchte noch einmal eure Hilfe beanspruchen,
die Propertys werden Dank eurer Hilfe perfekt gesetzt.
zusätzlich möchte ich nun auch noch folgenden return haben
allerdings soll dieser einzeln für jedes Ergebis ausgegeben werden... ich dachte das ganze müsste so aussehen
allerdings weiß ich nicht in was....
die Propertys werden Dank eurer Hilfe perfekt gesetzt.
zusätzlich möchte ich nun auch noch folgenden return haben
Code: Alles auswählen
query = query % (','.join(properties), filter)
cur.execute(query, parameters)
for idx, data in enumerate(cur, offset):
for field, item in zip(properties, data):
WINDOW.setProperty('SerienPlaner.%d.%s' % (idx, field), item)
for ... in ...
listitems_str = {field : item}
listitems.append(listitems_str)
return listitems
Code: Alles auswählen
for (idx, field) in ...
also...
so wie es jetzt ist bekomme ich ein Ergebnis aus der SQL-Abfrage und zwar 15 Datensätze die dann in das Property geschrieben werden...
nun möchte ich zusätzlich jeden Datensatz einzeln haben... und zwar für idx0, idx1, idx2 usw...
das in dem Ergebnis aus der SQL-Abfrage ja die Datensätze den idx zugeordnet sind, dachte ich man kann das Ergebnis noch in einem loop weiterverarbeiten....
wenn ich den "listitems.append(listitems_str)" debugge sieht das Ergebnis so aus:
mein Ergebnis soll aber so aussehen
so wie es jetzt ist bekomme ich ein Ergebnis aus der SQL-Abfrage und zwar 15 Datensätze die dann in das Property geschrieben werden...
nun möchte ich zusätzlich jeden Datensatz einzeln haben... und zwar für idx0, idx1, idx2 usw...
das in dem Ergebnis aus der SQL-Abfrage ja die Datensätze den idx zugeordnet sind, dachte ich man kann das Ergebnis noch in einem loop weiterverarbeiten....
wenn ich den "listitems.append(listitems_str)" debugge sieht das Ergebnis so aus:
Code: Alles auswählen
listitem_str [{'TVShow': u'Private Practice'},
{'Staffel': u'3'},
{'Episode': u'11'},
{'Title': u'Noch eine zweite Chance'},
{'Starttime': u'11:25'},
{'Datum': u'12.04.2016'},
{'neueEpisode': u''},
{'Channel': u'SIXX HD'},
{'Logo': u'image://G%3a%5cKodi%5cSenderlogos%5csixx%20hd.png/'},
{'PVRID': u'38'},
{'Description': u'Addison und ihr Exkollege Doktor Mark Sloan, dessen schwangere Tochter sie in Los Angeles operieren soll, finden angesichts beidseitig schwieriger Lebenssituationen Trost beieinander. Damit sorgen sie f\xfcr Aufregung in der Praxis und handeln sie sich neue Probleme ein. Cooper zeigt sich von seiner unerbittlichen Seite, sowohl gegen\xfcber seiner Freundin Charlotte wie auch einer kranken Mutter gegen\xfcber, der er das Sorgerecht f\xfcr ihren Sohn entziehen will.'},
{'Rating': u'7.2'},
{'Altersfreigabe': u'TV-14'},
{'Genre': u'Drama'},
{'Studio': u'ABC (US)'},
{'Status': u'Ended'},
{'Jahr': u'2007'},
{'Thumb': u'http://www.thetvdb.com/banners/episodes/80542/1499371.jpg'},
{'FirstAired': u'2010-01-14'},
{'RunningTime': u'55'},
{'Poster': u'http://thetvdb.com/banners/posters/80542-6.jpg'},
{'WatchType': u'Internationale Serien'},
{'TVShow': u'Navy CIS'},
{'Staffel': u'6'},
{'Episode': u'11'},
{'Title': u'Stille Nacht'},
{'Starttime': u'11:35'},
{'Datum': u'12.04.2016'},
{'neueEpisode': u''},
{'Channel': u'Fox HD'},
{'Logo': u'image://G%3a%5cKodi%5cSenderlogos%5cfox%20hd.png/'},
{'PVRID': u'36'}, {'Description': u'Kurz vor dem Heiligabend wird ein \xe4lteres Ehepaar in seinem Haus \xfcberfallen und ermordet. Die Beschreibung eines Zeugen sowie Fingerabdr\xfccke am Tatort f\xfchren die Polizei auf die Spur des Navy-Sanit\xe4ters Ned Quinn, ein Vietnam-Veteran, der bei einem Brand im Jahre 1991 ums Leben gekommen sein soll ...'},
{'Rating': u'7.5'},
{'Altersfreigabe': u'TV-14'},
{'Genre': u'Action | Adventure | Crime | Drama'},
{'Studio': u'CBS'}, {'Status': u'Continuing'},
{'Jahr': u'2003'},
{'Thumb': u'http://www.thetvdb.com/banners/episodes/72108/404893.jpg'},
{'FirstAired': u'2008-12-16'},
{'RunningTime': u'45'},
{'Poster': u'http://thetvdb.com/banners/posters/72108-14.jpg'},
{'WatchType': u'Internationale Serien'}]
Code: Alles auswählen
listitem_str [{'TVShow': u'Private Practice',
'Staffel': u'3',
'Episode': u'11',
'Title': u'Noch eine zweite Chance',
'Starttime': u'11:25',
'Datum': u'12.04.2016',
'neueEpisode': u'',
'Channel': u'SIXX HD',
'Logo': u'image://G%3a%5cKodi%5cSenderlogos%5csixx%20hd.png/',
'PVRID': u'38',
'Description': u'Addison und ihr Exkollege Doktor Mark Sloan, dessen schwangere Tochter sie in Los Angeles operieren soll, finden angesichts beidseitig schwieriger Lebenssituationen Trost beieinander. Damit sorgen sie f\xfcr Aufregung in der Praxis und handeln sie sich neue Probleme ein. Cooper zeigt sich von seiner unerbittlichen Seite, sowohl gegen\xfcber seiner Freundin Charlotte wie auch einer kranken Mutter gegen\xfcber, der er das Sorgerecht f\xfcr ihren Sohn entziehen will.',
'Rating': u'7.2',
'Altersfreigabe': u'TV-14',
'Genre': u'Drama',
'Studio': u'ABC (US)',
'Status': u'Ended',
'Jahr': u'2007',
'Thumb': u'http://www.thetvdb.com/banners/episodes/80542/1499371.jpg',
'FirstAired': u'2010-01-14',
'RunningTime': u'55',
'Poster': u'http://thetvdb.com/banners/posters/80542-6.jpg',
'WatchType': u'Internationale Serien'},
{'TVShow': u'Navy CIS',
'Staffel': u'6',
'Episode': u'11',
'Title': u'Stille Nacht',
'Starttime': u'11:35',
'Datum': u'12.04.2016',
'neueEpisode': u'',
'Channel': u'Fox HD',
'Logo': u'image://G%3a%5cKodi%5cSenderlogos%5cfox%20hd.png/',
'PVRID': u'36'}, {'Description': u'Kurz vor dem Heiligabend wird ein \xe4lteres Ehepaar in seinem Haus \xfcberfallen und ermordet. Die Beschreibung eines Zeugen sowie Fingerabdr\xfccke am Tatort f\xfchren die Polizei auf die Spur des Navy-Sanit\xe4ters Ned Quinn, ein Vietnam-Veteran, der bei einem Brand im Jahre 1991 ums Leben gekommen sein soll ...',
'Rating': u'7.5',
'Altersfreigabe': u'TV-14'},
'Genre': u'Action | Adventure | Crime | Drama',
'Studio': u'CBS'}, {'Status': u'Continuing',
'Jahr': u'2003',
'Thumb': u'http://www.thetvdb.com/banners/episodes/72108/404893.jpg',
'FirstAired': u'2008-12-16',
'RunningTime': u'45',
'Poster': u'http://thetvdb.com/banners/posters/72108-14.jpg',
'WatchType': u'Internationale Serien'}]
@sveni_lee: wenn Du das nicht so haben willst, solltest Du eben nicht für jedes Feld ein eigenes Wörterbuch erzeugen.
Code: Alles auswählen
listitems.append(dict(zip(properties, data)))
@Sirius3: genau das wollte ich haben... Also alles was mit Listen und Dictionarys zu tun hat ist im Moment noch sehr verwirrend für mich...
Danke für die Erklärung!
Kurze Frage noch, nach dem return listitems ist dann schluß, weitere folgende Befehle werden nicht mehr abgearbeitet, oder?
sieht jetzt bei mir so aus:
aber das löschen wird nicht mehr ausgeführt...
Danke für die Erklärung!
Kurze Frage noch, nach dem return listitems ist dann schluß, weitere folgende Befehle werden nicht mehr abgearbeitet, oder?
sieht jetzt bei mir so aus:
Code: Alles auswählen
def refreshWidget(category, offset=0):
listitems = []
conn = sqlite3.connect(SerienPlaner)
cur = conn.cursor()
query = """SELECT %s
FROM TVShowData
WHERE julianday(_Starttime) + (_RunningTime / 24.0 / 60.0) > julianday('now', 'localtime')
%s
ORDER BY StartTime
LIMIT 15"""
if category == __LS__(30116):
filter = ""
parameters = ()
else:
filter = " AND WatchType = ?"
parameters = (category,)
query = query % (','.join(properties), filter)
cur.execute(query, parameters)
for idx, data in enumerate(cur, offset):
for field, item in zip(properties, data):
WINDOW.setProperty('SerienPlaner.%d.%s' % (idx, field), item)
listitems.append(dict(zip(properties, data)))
return listitems
cur.execute("""DELETE FROM TVShowData WHERE julianday(_Starttime) + (_RunningTime / 24.0 / 60.0) < julianday('now', 'localtime')""")
conn.commit()
conn.close()
aber das löschen wird nicht mehr ausgeführt...
@sveni_lee: Richtig, nach der Ausführung einer ``return``-Anweisung wird in einer Funktion nichts anderes mehr ausgeführt, ausser das ``return`` steht in einem ``try``-Block und es gibt einen ``finally``-Zweig, oder das ``return`` steht in einem ``with``-Block, dann wird noch der ”Aufräumcode” vom Kontextmanager ausgeführt, der zu dem ``with`` gehört.
Die Datenbankabfragen haben in dem Code übrigens eine ”Dynamik” erreicht wo ich aufhören würde SQL-Anweisungen als Zeichenketten zusammen zu basteln und auf eine Abstraktion wie `SQLAlchemy` zurückgreifen würde. Und wenn man das schon einsetzt, kann man sich auch gleich noch überlegen das ORM davon zu verwenden.
Die Datenbankabfragen haben in dem Code übrigens eine ”Dynamik” erreicht wo ich aufhören würde SQL-Anweisungen als Zeichenketten zusammen zu basteln und auf eine Abstraktion wie `SQLAlchemy` zurückgreifen würde. Und wenn man das schon einsetzt, kann man sich auch gleich noch überlegen das ORM davon zu verwenden.
ich hab das ganze mal in einen ``try``-Block gepackt aber irgendwie wird das löschen trotzdem nicht ausgefügrt...BlackJack hat geschrieben:Richtig, nach der Ausführung einer ``return``-Anweisung wird in einer Funktion nichts anderes mehr ausgeführt, ausser das ``return`` steht in einem ``try``-Block und es gibt einen ``finally``-Zweig, oder das ``return`` steht in einem ``with``-Block, dann wird noch der ”Aufräumcode” vom Kontextmanager ausgeführt, der zu dem ``with`` gehört.
Die Daten werden aber mit ``return`` übergeben
Code: Alles auswählen
def refreshWidget(category, offset=0):
listitems = []
conn = sqlite3.connect(SerienPlaner)
cur = conn.cursor()
query = """SELECT %s
FROM TVShowData
WHERE julianday(_Starttime) + (_RunningTime / 24.0 / 60.0) > julianday('now', 'localtime')
%s
ORDER BY StartTime
LIMIT 15"""
if category == __LS__(30116):
filter = ""
parameters = ()
else:
filter = " AND WatchType = ?"
parameters = (category,)
query = query % (','.join(properties), filter)
cur.execute(query, parameters)
try:
for idx, data in enumerate(cur, offset):
for field, item in zip(properties, data):
WINDOW.setProperty('SerienPlaner.%d.%s' % (idx, field), item)
listitems.append(dict(zip(properties, data)))
return listitems
except:
pass
cur.execute("""DELETE FROM TVShowData WHERE julianday(_Starttime) + (_RunningTime / 24.0 / 60.0) < julianday('now', 'localtime')""")
conn.commit()
conn.close()
wie ihr unweigerlich bemerkt haben werdet, bin ich mit den "einfachen" SQL-Abfragen ja schon überfordert... wie sol ich dann mit SQL_Alchemy klar kommen?BlackJack hat geschrieben:Die Datenbankabfragen haben in dem Code übrigens eine ”Dynamik” erreicht wo ich aufhören würde SQL-Anweisungen als Zeichenketten zusammen zu basteln und auf eine Abstraktion wie `SQLAlchemy` zurückgreifen würde. Und wenn man das schon einsetzt, kann man sich auch gleich noch überlegen das ORM davon zu verwenden.
@sveni_lee: wie BlackJack schon geschrieben hat, hilft einfach ein try-Block mit einem except-Block der das Programm unwartbar macht nichts, weil nur der Teil in einem finally-Block nach einem return noch ausgeführt wird. Du schreibst auch noch zu viele Wörterbücher in Deine Liste.
Das mit dem except versteh ich ja noch, dadurch wird einfach jeder Fehler abgefangen und man sieht nichts und es würde auch nichts passieren!
Gut aber wie müsste ich den try denn sonst aufbauen damit der Code noch weiter ausgeführt wird...
Ich verstehe auch nicht, wie ich meine Wörterbücher reduzieren könnte...
Gut aber wie müsste ich den try denn sonst aufbauen damit der Code noch weiter ausgeführt wird...
Ich verstehe auch nicht, wie ich meine Wörterbücher reduzieren könnte...
@sveni_lee: An dem ``try``-Block brauchst Du nichts ändern. Von ``except`` habe ich allerdings in dem Zusammenhang nichts geschrieben. Dafür aber von ``finally``, was Du aber nirgends verwendet hast.
Du hast ganz offensichtlich nicht verstanden/nachvollzogen was der Ausdruck von Sirius3 macht, sondern ihn einfach auf gut Glück in Deinen Code reingeschrieben. Mach Dir klar was da passiert, dann weisst Du auch wie man den *richtig* in Deinen Code integriert.
Ich denke nicht, dass SQLAlchemy die Komplexität an der Stelle tatsächlich stark erhöht, auf jeden Fall wird es deutlich weniger fehleranfällig, weil es schwerer wird kaputtes SQL zu erstellen. Was bei manuellem zusammenbasteln auf Zeichenkettenebene schnell geht. Und lesbarer wird es IMHO auch.
Du hast ganz offensichtlich nicht verstanden/nachvollzogen was der Ausdruck von Sirius3 macht, sondern ihn einfach auf gut Glück in Deinen Code reingeschrieben. Mach Dir klar was da passiert, dann weisst Du auch wie man den *richtig* in Deinen Code integriert.
Ich denke nicht, dass SQLAlchemy die Komplexität an der Stelle tatsächlich stark erhöht, auf jeden Fall wird es deutlich weniger fehleranfällig, weil es schwerer wird kaputtes SQL zu erstellen. Was bei manuellem zusammenbasteln auf Zeichenkettenebene schnell geht. Und lesbarer wird es IMHO auch.
Also der Ausdruck setzt meine Werte aus der Liste propertys in ein dictionary mit den Werten aus der SQL Datenbank und baut daraus dann wieder eine Liste... Ich das Ergebniss des Ausdrucks gedegugged und es ist genau der Aufbau den ich für die Weiterverarbeitung bebötige.BlackJack hat geschrieben: Du hast ganz offensichtlich nicht verstanden/nachvollzogen was der Ausdruck von Sirius3 macht, sondern ihn einfach auf gut Glück in Deinen Code reingeschrieben. Mach Dir klar was da passiert, dann weisst Du auch wie man den *richtig* in Deinen Code integriert.
Okay auch das kann ich mir ansehen und ändern wenn ich das ganze mal richtig in KODI zum laufen gebracht habe.Ich denke nicht, dass SQLAlchemy die Komplexität an der Stelle tatsächlich stark erhöht, auf jeden Fall wird es deutlich weniger fehleranfällig, weil es schwerer wird kaputtes SQL zu erstellen. Was bei manuellem zusammenbasteln auf Zeichenkettenebene schnell geht. Und lesbarer wird es IMHO auch.
@sveni_lee: Der Ausdruck „baut“ keine „Liste“. Die Liste die da am Ende heraus kommt, solltest Du Dir aber mal anschauen.
Das habe ich doch getan... Ich hatte doch geschreiben, das ich die Liste dann ins Log habe schreiben lassen um zu sehen wie sie aussieht.BlackJack hat geschrieben:Die Liste die da am Ende heraus kommt, solltest Du Dir aber mal anschauen.
in den {} ist jeweils ein datensatz vorhanden, die einzelnen Daten darin sind durch ``,`` von einander getrennt.
in der [] sind alle datensätze zusammengefasst.
Genau so sollte es aussehen damit ich es mit xbmcgui.ListItem() weiter verarbeiten kann...
Code: Alles auswählen
elif methode == 'get_item_serienplaner':
sp_items = refreshWidget(__LS__(30116))
writeLog('spitems %s' % (sp_items), level=xbmc.LOGDEBUG)
url = '-'
for sitem in sp_items:
li = xbmcgui.ListItem()
li.setProperty("channel", sitem['Channel'])
li.setArt("Poster"), sitem['Poster']
li.setProperty("plot", sitem['Description'])
li.setProperty("staffel", sitem['Staffel'])
li.setProperty("episode", sitem['Episode'])
li.setProperty("starttime", sitem['Starttime'])
li.setProperty("rating", sitem['Rating'])
li.setProperty("senderlogo", sitem['Logo'])
li.setProperty("genre", sitem['Genre'])
li.setProperty("date", sitem['Datum'])
li.setProperty("rumtime", sitem['RunningTime'])
li.setProperty("studio", sitem['Studio'])
li.setProperty("year", sitem['Jahr'])
li.setProperty("altersfreigabe", sitem['Altersfreigabe'])
li.setProperty("status", sitem['Status'])
li.setProperty("label", sitem['Title'])
li.setProperty("label2", sitem['TVShow'])
li.setArt("thumb", sitem['Thumb'])
xbmcplugin.addDirectoryItem(handle=addon_handle, url=url, listitem=li)
xbmcplugin.endOfDirectory(addon_handle)
@sveni_lee: Falsch daran ist, das diese Liste zu viele Wörterbücher enthält. Das sollte eigentlich auffallen. Oder der Quelltext den Du gezeigt hast, stimmt nicht mit dem überein, den Du tatsächlich verwendest.
ich bin mir nicht sicher was genau Du meinst...BlackJack hat geschrieben:@sveni_lee: Falsch daran ist, das diese Liste zu viele Wörterbücher enthält. Das sollte eigentlich auffallen. Oder der Quelltext den Du gezeigt hast, stimmt nicht mit dem überein, den Du tatsächlich verwendest.
Code: Alles auswählen
def refreshWidget(category, offset=0):
listitems = []
conn = sqlite3.connect(SerienPlaner)
cur = conn.cursor()
query = """SELECT %s
FROM TVShowData
WHERE julianday(_Starttime) + (_RunningTime / 24.0 / 60.0) > julianday('now', 'localtime')
%s
ORDER BY StartTime
LIMIT 15"""
if category == __LS__(30116):
filter = ""
parameters = ()
else:
filter = " AND WatchType = ?"
parameters = (category,)
query = query % (','.join(properties), filter)
cur.execute(query, parameters)
try:
for idx, data in enumerate(cur, offset):
for field, item in zip(properties, data):
WINDOW.setProperty('SerienPlaner.%d.%s' % (idx, field), item)
listitems.append(dict(zip(properties, data)))
return listitems
finally:
cur.execute("""DELETE FROM TVShowData WHERE julianday(_Starttime) + (_RunningTime / 24.0 / 60.0) < julianday('now', 'localtime')""")
conn.commit()
conn.close()
Code: Alles auswählen
properties = ['TVShow', 'Staffel', 'Episode', 'Title', 'Starttime', 'Datum', 'neueEpisode', 'Channel', 'Logo', 'PVRID', 'Description', 'Rating', 'Altersfreigabe', 'Genre', 'Studio', 'Status', 'Jahr', 'Thumb', 'FirstAired', 'RunningTime', 'Poster', 'WatchType']
@sveni_lee: `listitems` ist falsch. Das ist zu lang. Weil Du da zu viele Wörterbücher rein steckst. Und zwar 22 mal mehr als drin sein sollten. Für jeden Datensatz hängst Du jeweils 22 gleiche Wörterbücher an. Wie kann so etwas nicht auffallen‽
jetzt sehe bzw. verstehe ich was Du meinst...BlackJack hat geschrieben:Für jeden Datensatz hängst Du jeweils 22 gleiche Wörterbücher an
weil ich mir nur den ersten und den letzt Datensatz angesehen habe...BlackJack hat geschrieben:Wie kann so etwas nicht auffallen
gut ich benötige alle Werte aus properties mit den dazugehörigen Daten aus der SQL für jeden abgefragten Datensatz.
Ich wüsste nicht welches Wörterbuch ich da jetzt weg lassen kann...