Обновление значений в базе данных
Я записываю 2 значения в базу данных таким орбазом:
В одной из функции: zapis(message.chat.id, 0)
Этой функцией является:
def zapis(user_id, Type):
with sqlite3.connect(path_to_db) as db:
db.execute("INSERT INTO storage "
"(user_id, Type) "
"VALUES (?, ?)",
[user_id, Type])
db.commit()
После чего, мне требуется ОБНОВИТЬ эту базу данных вот таким значением:
zapis_type(message.chat.id, Type='Text')
def zapis_type(user_id, Type):
with sqlite3.connect(path_to_db) as db:
db.execute(f"UPDATE storage SET Type={str('TEXT')} WHERE user_id={user_id}")
db.commit()
И после чего выдаёт вот такую вот ошибку, как пишет Visual Studio:
Exception has occurred: OperationalError (note: full exception trace is shown but execution is paused at: process_message) no such column: TEXT
Ответы (1 шт):
Ваша проблема в форматировании в этой строке:
db.execute(f"UPDATE storage SET Type={str('TEXT')} WHERE user_id={user_id}")
Функция str никакого отношения к интерпретации переданного параматра базой данных не имеет. В итоге база получает строку
UPDATE storage SET Type=TEXT WHERE user_id=1
и вполне логично ищет поле TEXT.
Правильный вариант:
db.execute(f"UPDATE storage SET Type='{'TEXT'}' WHERE user_id={user_id}")
ковычки вынесены в запрос.
PS: проблемы правда на этом не заканчиваются, поработайте над неймингом своих функций и почитайте про sql-инъекции.