2012-05-01 2 views
1
import sqlite3  
conn = sqlite3.connect('sample.db')  
cursor = conn.cursor()  
data = cursor.execute('''SELECT * From Table''') 

for i in data:  
    title = i[0]   
    status = i[1]  
    cursor.execute('''UPDATED Table SET status=? WHERE title=?''', (status, title)) 

cursor.close()  
conn.commit() 

여러 번의 반복을 통해 업데이트하려고합니다. 그러나 데이터베이스가 첫 번째 업데이트를하면 바로 스크립트가 루프에서 빠져 나옵니다. 이 문제를 해결하는 방법? 감사!python sqlite3 for 루프 업데이트

+0

"그러나 데이터베이스가 첫 번째 업데이트를하면 바로 스크립트가 루프에서 빠져 나옵니다." 코드가 하나의 업데이트를 작성한다고 확신합니까? 구문이 잘못되었습니다. –

+0

이런 종류의 작업은 관용적 인 SQL이 아닙니다. 훨씬 더 나은 성능을 위해 이것을 루프 용이 아닌 단일 명령문으로 다시 작성할 수 있습니다. 당신이하고있는 질의에 대해 좀 더 말해 줄 수 있습니까? 우리는 당신에게 더 나은 대답을 줄 수 있습니다. – SingleNegationElimination

답변

6

루프 전에 data = data.fetchall()을 사용하십시오. 그렇지 않으면 결과 집합을 반복 할 때 커서를 루프 내부로 재활용합니다 (결과 집합 재설정).

.fetchall()을 사용하면 커서를 다시 사용하기 전에 로컬로 저장 한 결과 목록을 반환합니다.

또는 첫 번째 쿼리의 결과를 로컬로 캐시하지 않으려는 경우 업데이트 문에 사용할 별도의 커서를 만듭니다.