sqlite3.ProgrammingError: Error binding parameter 1: type 'tuple' is not supported
При попытке обновления базы данных sqlite3 выводит вот такую ошибку: sqlite3.ProgrammingError: Error binding parameter 1: type 'tuple' is not supported
Вот код:
def setinventory(msgid, added):
sql.execute("UPDATE bank SET inventory = ? WHERE id = ?", (added, msgid))
g = list(get.getsql.getinventory(msgid))
g.append(message.text[8:])
get.getsql.setinventory(msgid, tuple(g))
Ответы (1 шт):
В setinventory(msgid, added) вы вызываете sql.execute, оборачивая аргументы (как added) в кортеж (tuple), чтобы был биндинг
Но при вызове setinventory вы еще раз в аргумент added передаете кортеж:
get.getsql.setinventory(msgid, tuple(g))
Передавайте как есть:
get.getsql.setinventory(msgid, g)
UPD.
Выяснилось, что есть вопросы получения данных из getinventory, а также хранения и добавления элементов как в список, но в строковом поле таблицы.
Реализация хранения нескольких элементов в одном строковом поле:
- Исправляем функцию
getinventory- теперь она возвращает честное строковое значение - Придумываем формат строки для нескольких элементов, пусть это будет по разделителю
", "
Пример:
def getinventory(msgid: int) -> str:
return sql.execute(f"SELECT inventory FROM bank WHERE id = ?", (msgid,)).fetchone()[0]
def setinventory(msgid: int, added: str):
sql.execute("UPDATE bank SET inventory = ? WHERE id = ?", (added, msgid))
g = get.getsql.getinventory(msgid).split(", ")
g.append(message.text[8:])
get.getsql.setinventory(msgid, ", ".join(g))
Формат строки можно сделать надежнее, храня как список в json (но эта тема для другого вопроса :))