@kibergile

Почему обновляется только первое значение таблицы?

Есть код типа:
for i in cursor.execute(f"PRAGMA table_info(userResource)"):
	if y < 2:
		y+=1
	else:
		cursor.execute(f"UPDATE userResource SET {i[1]} = 0 WHERE ID= {ID}")

и таблица типа:
|autofill|ID|res1|res2|

При этом количество res{num} неопределено, поэтому сделал такой костыль. Но проблема в том, что обнавляется только res1, а если убрать функцию cursor.execute и поставь заместо неё print(i[1]) то выведится res1 и res2 и тд. Пробовал уже добавить после cursor.execute коммит, но всё равно обновляет только первое значение.
Почему так и как это можно было бы исправить?
  • Вопрос задан
  • 93 просмотра
Решения вопроса 1
@o5a
Не могу сказать наверняка, не зная, откуда берется переменная y, но в самом update получается следующее.
Первым в списке полей, возвращаемом table_info очевидно идет поле ID. Первой же операцией update это поле сбрасывается в 0, т.к получается конструкция
UPDATE userResource SET ID = 0 WHERE ID = твой_ID
Из-за этого последующие апдейты других полей не срабатывают, т.к. записи с ID = твой_ID уже нет, ты ее затёр нулем.
Можно добавить проверку по имени поля, чтобы такого не случалось, наподобие

if i[1] != 'ID':
    cursor.execute('UPDATE ...


И выборку из pragma лучше все же сделать как и обычную, через fetchall
for i in cursor.execute(f"PRAGMA table_info(userResource)").fetchall():
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы