Вставить список кортежей sqlite python, ошибка - PullRequest
0 голосов
/ 25 мая 2018

Это мой список кортежей, называемый "searchterms"

 [('2014', '100908'), ('2014', '101049'), ('2014', '101007'), ('2014', '100881'), ('2014', '100866')]`

Вот код, который я пытаюсь использовать, чтобы вставить эти кортежи в базу данных sqlite, содержащую только два столбца с именами caseYR и caseNUM

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()

Я видел этот вопрос на StackOverFlow и во многих местах в Интернете, и предлагаемые решения по какой-то причине не работают.Постоянно получаю эту ошибку:

cur.executemany("INSERT INTO Cases(caseYR, caseNUM) VALUES (?,?)", ("searchterms"))
sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 2, and there are 1 supplied.

Обратите внимание, я видел, я думаю, что я думаю, что все подобные вопросы на StackOverFlow и пробовал эти варианты и не удалось.Есть новые идеи?

Ответы [ 2 ]

0 голосов
/ 26 мая 2018

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()
0 голосов
/ 25 мая 2018

Не уверен, почему это сработало, но теперь этот код работает для меня, чтобы взять список, полный двух кортежей элементов, и вставить их в таблицу в БД sqlite.

conn = sqlite3.connect('searchterms.db')
    cur = conn.cursor()
    cur.execute('''CREATE TABLE IF NOT EXISTS Cases (caseyr TEXT, casenum INTEGER)''')
    cur.executemany('insert into Cases (caseyr, casenum) values (?,?)',tupledlist)
    conn.commit()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...