0
votes

I'm getting this Sqlite3 programming error: sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 2, and there are 0 supplied.

I'm not sure why. I have tried everything I can think of. Please assist.

Thanks!

import csv

import sqlite3

with sqlite3.connect("new.db") as connection:

   c = connection.cursor()

   employees = csv.reader(open("employees.csv", "rU"))

   #c.execute("CREATE TABLE employees (firstname TEXT, lastname TEXT)")
   c.executemany("INSERT INTO employees(firstname, lastname) values (?, ?)", employees)
3

3 Answers

0
votes
c.executemany("INSERT INTO employees(firstname, lastname) values (?, ?)", employees)

You have two ?, but supplied only with employees => values (?, ?)", employees)

0
votes

csv.reader yields a generator expression. Thus, you need to caste the result as a list:

c.executemany("INSERT INTO employees(firstname, lastname) values (?, ?)", list(employees))
0
votes

employees needs to be a 2d list, some for each call of executemany. You can create is easily using a nested list comprehensions:

import csv
import sqlite3

with sqlite3.connect("new.db") as connection:

   c = connection.cursor()

   reader = csv.reader(open("employees.csv", "rU"))
   employees = [[x for x in row] for row in reader]

   c.executemany("INSERT INTO employees(firstname, lastname) values (?, ?)", employees)