Skip to main content
 首页 » 编程设计

python导入csv到sqlite

2025年05月04日34kerrycode

您好,我正在尝试使用 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

请您参考如下方法:

在将文件传递给 csv.reader 之前,您需要先打开该文件。这是一个基本的可运行示例。我添加了一个类以允许您按原样使用现有方法。

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()