Передать массив параметров в VALUES(?) в SQLite
Код:
import csv
import sqlite3
class RowSet:
def __init__(self):
self.rows = set()
def step(self, value):
self.rows.add(value)
def finalise(self):
return ';'.join(self.rows)
conn = sqlite3.connect(":memory:")
conn.create_aggregate('row_set', 1, RowSet)
cur = conn.cursor()
cur.execute('CREATE TABLE materials(w);')
with open('materials.csv', 'r') as f:
dr = csv.DictReader(f)
to_db = [i["вес"] for i in dr]
cur.executemany("INSERT INTO materials(w) VALUES(?)", (to_db, ))
ошибка:
Traceback (most recent call last):
File "C:\Users\Наран\PycharmProjects\csvvvvv\Additional task\aggregation.py", line 24, in <module>
cur.executemany("INSERT INTO materials(w) VALUES(?)", (to_db, ))
sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 1, and there are 4 supplied.
Ответы (1 шт):
Автор решения: Rauf 44
→ Ссылка
Я нашел решение, мы просто используем функцию zip:
cur.executemany("INSERT INTO materials(w) VALUES(?)", (to_db, ))
изменено на:
cur.executemany("INSERT INTO materials(w) VALUES(?);", zip(to_db))