Hi i am trying to import a csv file to a sqlite3 database using python tkinter.
I open file using askopenfilename dialog and pass the file to readFile function.
def csvFile(self):
f1 = askopenfilename()
self.readFile(f1)
def readFile(self, filename):
conn = sqlite3.connect('Unicommerce.db')
cur = conn.cursor()
cur.execute("""CREATE TABLE IF NOT EXISTS unicom(products varchar,channel varchar,regulatory_forms varchar,shipment varchar)""")
filename.encode('utf-8')
print "test1"
reader = csv.reader(filename)
for field in reader:
cur.execute("INSERT INTO unicom VALUES (?,?,?,?);", field)
conn.commit()
conn.close()
I am getting this error.
cur.execute("INSERT INTO unicom VALUES (?,?,?,?);", field)
ProgrammingError: Incorrect number of bindings supplied. The current statement uses 4, and there are 1 supplied.
I tried every possoible solution available but couldn't import file to database.
I also tried tried solutions given in these links
Importing a CSV file into a sqlite3 database table using Python
Python CSV to SQLite
EDIT: Link to input file Input File
解决方案
You need to open the file before you pass it to csv.reader. Heres a basic runnable example that works. I added a class to allow your existing methods to be used as is.
import sqlite3
import csv
class csvrd(object):
def csvFile(self):
self.readFile('Labels.csv')
def readFile(self, filename):
conn = sqlite3.connect('Unicommerce.db')
cur = conn.cursor()
cur.execute("""CREATE TABLE IF NOT EXISTS unicom(products varchar,channel varchar,regulatory_forms varchar,shipment varchar)""")
filename.encode('utf-8')
print "test1"
with open(filename) as f:
reader = csv.reader(f)
for field in reader:
cur.execute("INSERT INTO unicom VALUES (?,?,?,?);", field)
conn.commit()
conn.close()
c = csvrd().csvFile()