cursor.executemany
ожидает два параметра.Первый параметр - это запрос.Второй параметр должен быть итерируемым из итераций с размером, равным количеству привязок в запросе.В запросе есть два ?
, что означает две привязки.searchterms - это итеративный (список) итеративных элементов (кортежей) размера 2, поэтому он является допустимым вторым параметром для cursor.executemany
.
Первоначально вторым параметром был ("searchterms")
, что не удалось из-за строки "searchterms"
не относится к переменной searchterms
.Вместо этого он был интерпретирован как итеративный (строка), и поскольку строка имеет только один символ в каждом индексе, это дало бесполезную ошибку при указании только одной привязки.
Когда вы изменили второй параметр на searchterms
,кажется, что ваша searchterms
переменная была не списком кортежей, а списком строк, поэтому вы получили сообщение об ошибке, в котором указали 4 привязки.Строка '2014'
должна быть первым элементом и содержать 4 символа.
Исправление состоит в том, чтобы убедиться, что второй параметр, который вы передаете cursor.executemany
, действительно является итерируемым из итераций размера 2Тогда предложение MiltoxBeyond сработает.
Я запустил это, и оно сработало:
import sqlite3
searchterms = [('2014', '100908'), ('2014', '101049'), ('2014', '101007'), ('2014', '100881'), ('2014', '100866')]
conn = sqlite3.connect('searchdata.db')
cur = conn.cursor()
cur.execute('''CREATE TABLE IF NOT EXISTS Cases (caseYR TEXT, caseNUM TEXT)''')
cur.executemany("INSERT INTO Cases(caseYR, caseNUM) VALUES (?,?)", searchterms)
conn.commit()