@uprj

ValueError: parameters are of unsupported type?

Мне нужно вытащить баланс пользователя из таблицы
cursor.execute("SELECT balance FROM users WHERE id=?", plusid)

То есть нужен баланс пользователя с айди, которое хранится в переменной plusid
Получаю ошибку:
cursor.execute("SELECT balance FROM users WHERE id=?", plusid)
ValueError: parameters are of unsupported type

Все остальные запросы в sqlite3 у меня работают, а этот не хочет.
Если переменную ставлю в скобках
cursor.execute("SELECT balance FROM users WHERE id=?", (plusid))

То выдаёт ту же ошибку. Что я делаю не так?
  • Вопрос задан
  • 1975 просмотров
Решения вопроса 1
@uprj Автор вопроса
Смотрел вопросы по sqlite на хабре, и там человек также подставлял одно значение, но проблема была не с этим. В В общем, я разобрался. Нужно поставить значение в скобках и поставить после него запятую.
cursor.execute("SELECT balance FROM users WHERE id=?", (plusid,))

Тогда всё работает
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@voldemar21
Запятая после user_id нужна для того, чтобы передать его в качестве элемента кортежа, который является вторым аргументом метода execute().

Метод execute() принимает два аргумента: строку SQL-запроса и кортеж значений, которые нужно вставить в запрос. В данном случае в запросе есть одно место, которое нужно заполнить значением user_id.

Параметры, которые нужно передать в запрос, должны быть упакованы в кортеж. Если бы мы написали просто (user_id), то это было бы эквивалентно user_id без скобок, то есть передалось бы просто значение переменной user_id.

Однако, метод execute() ожидает кортеж с одним элементом, поэтому мы обязаны поставить запятую после user_id, чтобы создать кортеж с одним элементом, а не передать просто значение переменной.
user_id как пример. Тоже с этим мучался.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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