@Uadfl

Как подставить значение в запрос sqlite?

Здравствуйте, столкнулся с проблемой невозможности подставить значение в сам sql запрос используя '?'. Приведу похожий код ради наглядности:
#нерабочий код
result = cur.execute('SELECT ? FROM messages ORDER BY id DESC LIMIT 1', (value,)).fetchone() #value = 'message_time '
#рабочий код
result = cur.execute('SELECT message_time FROM messages ORDER BY id DESC LIMIT 1').fetchone()

Ошибка при попытке конвертировать в int:
ValueError: invalid literal for int() with base 10: 'message_time'
  • Вопрос задан
  • 167 просмотров
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
Имена полей подставлять нельзя.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@wincrx
Почему ты f-строку не используешь?
result = cur.execute(f'SELECT {value} FROM messages ORDER BY id DESC LIMIT 1').fetchone()
Ответ написан
mayton2019
@mayton2019
Bigdata Engineer
Коробочное решение этой задачи называется SQL-Builder.

Вот пример такого https://pypika.readthedocs.io/en/latest/2_tutorial...

Использовать string interpolation здесь технически возможно, но не выдерживает критики
по инфо-безопасности. Атака на инжекцию - это Top 10 уязвимостей софта в 21 веке.

Вот об этом коллеги тоже пишут в ответах.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы