2009-03-03 11 views
2

ビルド中のプログラムでは、次のSQL文があります。id_listは非常に大きなリストになることがあります。どのようにsqliteクエリをより効率的にするには?

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

非常に多くの更新クエリが含まれていないより効率的な方法がありますか?

+0

1あなたの問題を考えるために – Noah

答えて

3

SQL:

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

コード:

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

あり、よりエレガントですが、準最適解:

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

第二のオプションが表示されます元のポスターと同じになるようにしてください。 – Karl

+1

全くありません。 forループの代わりにexcecute ** many ** – vartec

+0

ありがとうございます、私はあなたの第一の解決策を使用し、すべてが正常に動作します。 – wodemoneke

関連する問題