Почему добавление моего ОБНОВЛЕНИЯ Sql прерывает мой цикл?

#python #sql #sqlite

#python #sql #sqlite

Вопрос:

У меня есть следующий код, который без экранированного оператора SQL работает нормально — он повторяет полный набор возвратов из предыдущего запроса SELECT, печатая идентификатор, обнаруженный язык (из bingtranslate) и текст.

 for row in c:
  lang=bingtranslate(row[0])
  tweetid = row[1]
  print tweetid, lang, row[0]
  #c.execute('UPDATE tweet SET iso_language_code=? WHERE id=?',(lang, tweetid))
  

Когда я отменяю вызов UPDATE, он повторяется один раз, а затем останавливается.

Что дает? Сообщение об ошибке отсутствует. Я уверен, что это что-то простое, но я просто не могу его взломать…

Комментарии:

1. Я не специалист по python, но выполнение запроса к вашей коллекции результатов c приводит к сбросу этой коллекции?

Ответ №1:

Я думаю, что вызов execute изменяет состояние c , так что на следующей итерации цикл заканчивается.

Комментарии:

1. ах, ХОРОШО — значит, я должен скопировать c в другой список [], а затем повторить это? с почти 1 миллионом строк это повредит, но, по крайней мере, это будет работать…

2. @Toby: Я не знаю Python, поэтому я пытаюсь объяснить, что я делаю на C #. Вы выполняете команду, используя тот же объект DataReader, поэтому у вас происходит сброс и, следовательно, странное поведение. На мой взгляд, вам не нужно копировать строки в другой объект, а только создать новый объект Command (пустой) и использовать его для выполнения вашего запроса, берущего параметры из c . Поправьте меня, если я ошибаюсь, пожалуйста.

Ответ №2:

Я не знаю Python, поэтому я пытаюсь объяснить, что я делаю на C #.
Вы выполняете команду, используя тот же объект DataReader ( c в python), поэтому у вас происходит сброс и, следовательно, странное поведение.
На мой взгляд, вам не нужно копировать строки в другой объект, а только создать новый объект Command (пустой) и использовать его для выполнения вашего запроса, берущего параметры из c .
Поправьте меня, если я ошибаюсь, пожалуйста.