Похоже, что ваша ошибка вызвана обновлением test
без его сброса.
Каждый раз, когда вы перебираете l oop, он добавляет в массив больше значений и в конечном итоге присваивает больше MySQL может использовать, следовательно, not all parameters were used in the SQL statement
.
Что касается того, почему обновляются все три столбца, похоже, что это, вероятно, вызвано попыткой обновить весь столбец каждый раз, когда требуется отдельное значение изменилось. Я бы предложил использовать WHERE
в вашем выражении SQL только для обновления ячейки, которую нужно изменить, что выглядело бы примерно так (мой MySQL немного ржавый, но общая идея):
UPDATE trg
FROM my_table
WHERE primary_key = %s # row_index
SET trg = %s # updated value
Другой вариант - сохранить значения в test
за пределами l oop для URL-адресов и обновить его один раз для пары URL / индекс, а затем выполнить существующий запрос SQL в обновить весь столбец сразу:
...
test = trg
for i in range(len(final_result)):
url = final_result[i]
...
insert = re.sub('<[^>]*>', '', str(trg[i]))
test[i] = insert
...
cursor.execute("UPDATE my_table SET trg=%s", (test))
...
Визуальное представление трех методов:
Original Column: ABC
Result Column: XYZ
Original Implementation:
ABC --X-> "Set ABC = XBC" --Y-> "Set XBC = XYC" --Z-> "Set XYC = XYZ"
SQL Change Using WHERE:
ABC --X-> "Set A = X" --> XBC --Y-> "Set B = Y" --> XYC --Z-> "Set C = Z" --> XYZ
Change Using Moved SQL:
Database Values:
ABC --X-> ABC --Y-> ABC --Z-> ABC --> "Set ABC = XYZ"
Local Variable:
ABC --X-> "Set A = X" --> XBC --Y-> "Set B = Y" --> XYC --Z-> "Set C = Z" --> XYZ