@szjyakgf

Как передать значение в команду sqlite3?

У меня есть таблица users, например мне нужно узнать сколько 1 в столбце n6(столбец с цифрами 1,2,3):
cur.execute("SELECT COUNT(*) FROM users WHERE n6 == 1")
xxx = cur.fetchone()
print(xxx)#получаю вывод: (5,)

Все работает, но нужно искать 1 не только в n6, есть еще другие столбцы n7, n8, n9... Для этого мне нужно подставить название столбца, но оно не работает:
mmml = 'n' + str(6)
cur.execute("SELECT COUNT(*) FROM users WHERE ? == 1", (mmml, ))
xxx = cur.fetchone()
print(xxx)#получаю вывод: (0,)

В чем может быть проблема? При подстановке n6, вывод всегда (0,) без разницы на данные из таблицы
  • Вопрос задан
  • 201 просмотр
Решения вопроса 1
@o5a
Подстановка значений в таком виде НЕ работает для идентификаторов, которыми являются названия таблиц и полей. В данном случае подставить можно через обычное форматирование строки:
cur.execute("SELECT COUNT(*) FROM users WHERE {} == 1".format(mmml))
или
cur.execute(f"SELECT COUNT(*) FROM users WHERE {mmml} == 1")

Возможно правильнее будет изменить сами таблицы, ведь эти нумерованные n1...6 похожи на какие-то костыли.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
shabelski89
@shabelski89
engineer
кровь из глаз :)
cur.execute("SELECT COUNT(*) FROM users WHERE ? = 1 OR ? = 1 ", ("n7","n8" ))
xxx = cur.fetchall()
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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