python将csv导入sqlite

时间:2015-07-06 10:34:04

标签: python sqlite csv

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

4 个答案:

答案 0 :(得分:2)

在将文件传递给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()

答案 1 :(得分:1)

execute可以这样工作:

  1. cur.execute("INSERT INTO unicom VALUES (value1,value2, value3,value4);")其中value1..4是您数据的正确文字表示。
  2. cur.execute("INSERT INTO unicom VALUES (?, ?, ?, ?);", [value1,value2, value3,value4] value1..4中的list和db驱动程序对正确解释主要数据类型负责。
  3. 好的,因为我无法查看您的数据,我会这样做:

    for field in reader:
        cur.execute("INSERT INTO unicom VALUES (?,?,?,?);",\
        field.slpit(my_separator)) #create list with 4 elements for second execute argument
    

答案 2 :(得分:1)

使用熊猫:



import pandas
import sqlite3

conn = sqlite3.connect("test.sqlite")

conn.execute("CREATE TABLE if not exists Data (Column1 TEXT, Column2 TEXT)")

df = pandas.read_csv("test.csv")
df.to_sql("Data", conn, if_exists='append', index=False)




答案 3 :(得分:0)

我想分享一个我用来将csv转换成sqlite数据库的库。

csv2sqlite

在终端中运行:csv2sqlite.py {csv-file-path} {sqlite-db-path} [{table-name}]。

确保您的数据库具有与csv相同的列号。

希望它有所帮助。

谢谢。