#python #sql #sqlite
#питон #sql #sqlite #python
Вопрос:
Я пытаюсь запросить свою базу данных sqlite3 и использовать значения из списка. Вот мой код:
for i in range(len(infolist)):
result = cursor.execute('SELECT COUNT(DISTINCT col1)
FROM tablename
WHERE col2 = ?', (infolist[i]))
Я получаю эту ошибку:
Ошибка программирования: ‘Указано неверное количество привязок. В текущем операторе используется 1, а их указано 22.’
Строка содержит 22 символа, что объясняет, почему существует 22 привязки. Очевидно, что я неправильно передаю строку в оператор SQL.
Комментарии:
1. Использование
IN
предложения, если массив можно превратить в список, разделенный запятыми, будет работать лучше и устранит необходимость в цикле.
Ответ №1:
Второй аргумент cursor.execute — это последовательность, и вы передали ему строку (которая представляет собой последовательность символов). Если вы пытаетесь создать кортеж из 1 элемента, вам нужна запятая. т.е. ('item',)
вместо ('item')
Также вы должны перебирать элементы и не использовать range и i:
for info in infolist:
result = cursor.execute('SELECT COUNT(DISTINCT col1)
FROM tablename
WHERE col2 = ?', (info,))
Комментарии:
1. Спасибо за информацию, что вы думаете об итерации нескольких списков ie. для i в диапазоне (len(infolist)): cursor.execute(‘ОБНОВИТЬ табличные данные, УСТАНОВИТЬ col1=?,col2=? ГДЕ col3=?’, (infolist[i], infolist2[i], infolist3[i]))
2. Это другой вопрос, но
cursor.executemany('UPDATE tabledata SET col1=?,col2=? WHERE col3=?', zip(inforlist, infolist2, infolist3))
это то, что вы хотите.
Ответ №2:
Вам нужно добавить запятую в конец (infolist[i])
прямо сейчас это строка из 22 символов, а не кортеж. (infolist[i],)
следует исправить это
Ответ №3:
Вам нужно добавить запятую, чтобы указать, что кортеж содержит 1 элемент:
>>> ('abc')
'abc'
>>> ('abc',)
('abc',)
Попробуйте передать (infolist[i],)
в cursor.execute
.