В настоящее время я изучаю, как использовать модуль sqlite3 в Python. Я пытаюсь написать код, который будет обновлять значение из столбца в sqlite, добавляя новое значение к существующему значению, но я сталкиваюсь с проблемами форматирования, которые я не знаю, как исправить ...
Я знаю, что основной синтаксис для этого (насколько мне известно) заключается в следующем:
sql_statement = "UPDATE table
SET column_name = column_name + new_value
WHERE condition;"
Проблема, с которой я сталкиваюсь, заключается в том, что я пытаюсь вставитьимя столбца с использованием словарных параметров из python. Вот где проблема возникает в моем коде:
muscle = 'Lats'
num_sets = 5
week_num = 40
sql_statement = f"UPDATE WeeklyMuscleSets
SET {muscle} = (:muscle) + (:num_sets)
WHERE WeekID = (:week_num);"
parameters = {'muscle':muscle,'num_sets':num_sets,'week_num':week_num}
c.execute(sql_statement,parameters)
Код работает просто отлично, но вместо добавления к существующему значению в таблице он заменяет его. Я провел некоторое тестирование, и когда я вручную вводил значение для переменной «мышц», оно обновлялось очень хорошо.
muscle = 'Lats'
num_sets = 5
week_num = 40
sql_statement = f"UPDATE WeeklyMuscleSets
SET {muscle} = Lats + (:num_sets)
WHERE WeekID = (:week_num);"
parameters = {'num_sets':num_sets,'week_num':week_num}
c.execute(sql_statement,parameters)
Это также работало, когда я использовал форматирование f-строки для переменной мышц, однако язнать, что это плохая практика и делает код уязвимым для атак с использованием инъекций.
По какой-то причине, когда я использую параметры, он не добавляет новое значение к существующему, а заменяет его, и я не понимаю, почему. Любая помощь в этом с благодарностью!