Ошибка при запросе к базе данных

В программе мне нужно делать выборку по столбцам для параметра. Не могу понять почему возникает ошибка. Не могли вы бы мне подсказать.

Traceback (most recent call last):
File "F:\bot_zadach\db.py", line 222, in <module>
sql_fetch_zad(con,spis)
File "F:\bot_zadach\db.py", line 216, in sql_fetch_zad
cursorObj.execute('SELECT "1za", "2za", "3za", "4za", "5za", "6za", "7za", "8za", "9za", "10za" FROM 
users WHERE id = ?', spis )
sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 1, and there are 9 supplied.

Вот код для получения выборки для базы данных:

def sql_fetch_zad(con, spis):              #выборка данных для списка участников
    cursorObj = con.cursor()
    cursorObj.execute('SELECT "1za", "2za", "3za", "4za", "5za", "6za", "7za", "8za", "9za", "10za"     FROM users WHERE id = ?', spis )
    rows = cursorObj.fetchall()
    print(rows)
    kort = []
    return kort
spis =('355656898')
sql_fetch_zad(con,spis)

Ответы (1 шт):

Автор решения: gil9red

В execute вторым параметром передается коллекция, что будет передана в запрос вместо binding-параметров (это символы ?).

У вас туда передано ('355656898'), а это станет просто строкой '355656898', т.к. скобки будут опущены. А т.к. строка является коллекцией, то она будет передана по одному символы в запрос sql (оттуда и ошибка про 9 значений).

Оберните строку в кортеж, добавив запятую (это создает кортеж на 1 элемент)

spis = ('355656898',)
#                 ^^^

Или оберните в список, так, думаю, нагляднее будет:

spis = ['355656898']
→ Ссылка