Python SQL Select оператор из списка переменных? - PullRequest
5 голосов
/ 20 мая 2011

Я пытаюсь запросить базу данных sqlite3 и использовать значения из списка. Вот мой код:

for i in range(len(infolist)):
    result = cursor.execute('SELECT COUNT(DISTINCT col1) 
                               FROM tablename 
                              WHERE col2 = ?', (infolist[i]))

Я получаю эту ошибку:

ProgrammingError: 'Указано неверное количество привязок. В текущем операторе используется 1, а поставлено 22. '

Строка содержит 22 символа, что объясняет, почему существует 22 привязки. Ясно, что я неправильно передаю строку в оператор SQL.

Ответы [ 3 ]

1 голос
/ 20 мая 2011

Вам нужно добавить запятую в конце (infolist[i]), сейчас это строка из 22 символов, а не кортеж. (infolist[i],) должно исправить это

1 голос
/ 20 мая 2011

Второй аргумент к cursor.execute - это последовательность, и вы передали ей строку (последовательность символов).Если вы пытаетесь сделать кортеж из 1 элемента, вам нужна запятая.т.е. ('item',) вместо ('item')

Также вы должны перебирать элементы и не использовать диапазон и i:

for info in infolist:
    result = cursor.execute('SELECT COUNT(DISTINCT col1) 
                               FROM tablename 
                              WHERE col2 = ?', (info,))
0 голосов
/ 20 мая 2011

Вам нужно добавить запятую, чтобы указать, что кортеж имеет 1 элемент:

>>> ('abc')
'abc'
>>> ('abc',)
('abc',)

Попробуйте передать (infolist[i],) cursor.execute.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...