Передать массив параметров в 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)) 
→ Ссылка