【发布时间】:2015-09-23 11:14:20
【问题描述】:
您好,我正在尝试使用 python tkinter 将 csv 文件导入 sqlite3 数据库。 我使用 askopenfilename 对话框打开文件并将文件传递给 readFile 函数。
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()
我收到此错误。
cur.execute("INSERT INTO unicom VALUES (?,?,?,?);", field)
ProgrammingError: Incorrect number of bindings supplied. The current statement uses 4, and there are 1 supplied.
我尝试了所有可用的解决方案,但无法将文件导入数据库。
我还尝试了这些链接中给出的尝试解决方案
Importing a CSV file into a sqlite3 database table using Python
Python CSV to SQLite
编辑:链接到输入文件Input File
【问题讨论】:
-
此错误意味着
field中没有足够的值来匹配您的表达式。尝试在 SQL 命令之前添加print repr(field)以查看field实际包含的内容。 -
如果你能提供一些输入数据的例子会更简单!
-
它正在打印这个 -- ['C'] 。我包括了我的输入文件。检查编辑
-
askopenfilename 有什么作用?看起来您在需要文件对象时尝试使用带有 csv 文件名的 reader(请参阅docs.python.org/2/library/csv.html#csv.reader)。您需要先打开文件,然后再将其提供给阅读器。试试
reader = csv.reader(open(filename, "r")) -
感谢我使用了 open(filename) 并且成功了