2010-03-31 7 views
3

이것은 매우 이상합니다. (admitedly이 첫 번째 시도는 python/sqlite입니다.) fetchAll()을 수행하면 모든 행을 얻을 수 있습니다. 하지만 그 이외에 - 내가 뭘하려고 상관없이 항상 첫 번째 행을 반환하는 db 끝납니다 - 두 번째 반복이 null이 반환되기 때문에 중지합니다. 파이썬으로 이것을 코딩하는 방법에 문제가 있다면 궁금해하십니까? 데이터베이스가 정상인 것처럼 보입니다.sqlite 및 파이썬 - 첫 번째 결과 만 가져옵니다.

con = sqlite3.connect('backup.db') 
con.row_factory = sqlite3.Row 
cur = con.cursor() 
cur.execute('select * from tb1;') 

for row in cur: 
    try: 
#  row = dataCur.fetchone() 
     #if row == None: break 
     print type(row) 

     print ' Starting on: %i' % row[0] 

     cleaner = Cleaner(scripts=True, remove_tags=['img'], embedded=True) 
     try: 
      cleaned = cleaner.clean_html(row[2]) #data stored in second col 
      cur.execute('update tb1 set data = ? where id = ?;', (cleaned, row[0])) 
     except AttributeError: 
      print 'Attribute error' 

     print ' Ended on: %i' % row[0] 

    except IOError: 
     print 'IOexception' 

답변

5

동일한 커서를 다시 사용하여 두 가지 다른 쿼리를 실행하고 있습니다. 두 개의 다른 커서를 사용하여 문제가 해결되는지 확인하십시오.

2

두 번째로 커서에서 실행을 호출하면 이전 호출의 결과가 삭제됩니다.

그래서 다시 실행을 호출하기 전에 모든 결과를 반환하기 때문에 fetchall을 사용할 수 있습니다.

업데이트하려면 두 번째 커서를 사용하여 첫 번째 결과를 무효화하지 않도록하십시오.

+0

두 분 모두 고맙습니다. – pencilNero

관련 문제