@szjyakgf

Как передать в функцию с sqlite запросом, название переменной?

def test(value1, user_id):
   cur.execute("UPDATE users SET ? = ? - 10 WHERE user_id = ?", (value1, value1, user_id))
   conn.commit()
test(sqlid, 345723)
# sqlid это название столбца в таблице sqlite

Но код считает что sqlid это переменная, и ее нужно задать, как решить эту проблему?
  • Вопрос задан
  • 382 просмотра
Решения вопроса 2
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
Если вам такое понадобилось, значит вы не понимаете принципы работы реляционных баз данных. Схема должна быть статична и известна до запуска кода. Исключения возможны в редких случаях, вроде написания ORM, но и тогда sql-запрос собирается не с помощью prepared statements и тем более не интерполяцией, форматированием или конкатенацией строк.
Ответ написан
Комментировать
ipatiev
@ipatiev
Потомок старинного рода Ипатьевых-Колотитьевых
Во-первых вам надо научиться не путать имена колонок в SQL с переменными в Python.
А во-вторых послушать Сергей Горностаев
И сделать примерно так.
def test(user_id):
   cur.execute("UPDATE users SET sqlid = sqlid - 10 WHERE user_id = ?", (user_id))
   conn.commit()
test(345723)


А если вдруг вы решили, что sqlid надо обязательно передавать через переменную, то внятно объяснить, почему вы так считаете.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
LaRN
@LaRN
Senior Developer
Если нужно передать имя колонки, то передавайте в процедуру строку, а сейчас передаётся переменная.
Примерно так:
test('sqlid' , 345723)
Ответ написан
Ваш ответ на вопрос

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

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