2009-03-03 7 views
2

J'ai l'instruction sql suivante dans un programme que je construis, où id_list est parfois une très grande liste.comment rendre la requête sqlite plus efficace?

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

Existe-t-il une manière plus efficace de faire cela qui n'implique pas autant de requêtes de mise à jour?

+0

+1 pour penser à votre problème – Noah

Répondre

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() 

Il y a aussi plus élégante, mais la solution sous-optimale:

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

Les options de seconde apparaît être le même que l'affiche originale a. – Karl

+1

Pas du tout. Au lieu de for loop, il y a ** beaucoup ** excecute ** – vartec

+0

Merci, j'ai utilisé votre 1ère solution et tout fonctionne comme il se doit. – wodemoneke

Questions connexes