2009-03-03 6 views
2

Ich habe die folgende SQL-Anweisung in einem Programm, das ich erstelle, wo id_list manchmal eine sehr große Liste ist.wie man sqlite Abfrage effizienter macht?

for id in id_list: 
    self.cursor.execute("""update songs set rating='L' where trackid=?""", (id,)) 
self.db.commit() 

Gibt es eine effizientere Möglichkeit, dies zu tun, die nicht so viele Update-Abfragen enthält?

+0

+1 für das Nachdenken über Ihr Problem – Noah

Antwort

3

SQL:

update songs set rating='L' where trackid IN (id_list) 

Code:

self.cursor.execute("update songs set rating='L' where trackid IN (%s)"%','.join(['?']*len(id_list)), id_list) 
self.db.commit() 

Es gibt auch elegante, aber suboptimale Lösung:

self.cursor.executemany("update songs set rating='L' where trackid=?", id_list) 
self.db.commit() 
+0

Die zweiten Optionen erscheinen das gleiche sein wie das Originalplakat. – Karl

+1

Überhaupt nicht. Statt for loop gibt es excecute ** viele ** – vartec

+0

Danke, ich habe deine 1. Lösung benutzt und alles funktioniert wie es soll. – wodemoneke