#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
.
Поправьте меня, если я ошибаюсь, пожалуйста.