Задать вопрос
@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 это переменная, и ее нужно задать, как решить эту проблему?
  • Вопрос задан
  • 453 просмотра
Подписаться 1 Простой 1 комментарий
Помогут разобраться в теме Все курсы
  • Нетология
    Fullstack-разработчик на Python + нейросети
    20 месяцев
    Далее
  • Skillfactory
    Профессия Python-разработчик
    9 месяцев
    Далее
  • SF Education
    Бэкенд-разработчик на Python
    3 месяца
    Далее
Решения вопроса 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)
Ответ написан
Ваш ответ на вопрос

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

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