尝试使用Python将CSV文件导入sqlite3数据库表时出错

时间:2020-05-19 23:07:22

标签: python sqlite csv

尝试使用python将此.csv导入sqlite并出现错误:

import csv, sqlite3
con = sqlite3.connect(":memory:")
cur = con.cursor()

cur.execute("CREATE TABLE t (ID, LIMIT_BAL, SEX, EDUCATION, MARRIAGE, AGE, PAY_0, PAY_2, PAY_3, PAY_4, PAY_5, PAY_6, BILL_AMT1, BILL_AMT2, BILL_AMT3, BILL_AMT4, BILL_AMT5, BILL_AMT6, PAY_AMT1, PAY_AMT2, PAY_AMT3, PAY_AMT4, PAY_AMT5, PAY_AMT6, Default);")

with open('C:\\Users\\Joseph\\Desktop\\W7\\UCI_Credit_Card.csv','rb') as fin: 

    dr = csv.DictReader(fin)

    to_db = [(i['col1'], i['col2']) for i in dr]

cur.executemany("INSERT INTO t (col1, col2) VALUES (?, ?);", to_db)
con.commit()
con.close()'''

错误:>>> ===============重新启动:C:/Users/Joseph/Desktop/W7/Wk7test.py ================= 追溯(最近一次通话): 文件“ C:/Users/Joseph/Desktop/W7/Wk7test.py”,第5行,在 cur.execute(“创建表t(ID,LIMIT_BAL,性别,教育,婚姻,年龄,PAY_0,PAY_2,PAY_3,PAY_4,PAY_5,PAY_6,BILL_AMT1,BILL_AMT2,BILL_AMT3,BILL_AMT4,BILL_AMT5,PAY_AMT5, ,PAY_AMT4,PAY_AMT5,PAY_AMT6(默认);“) sqlite3.OperationalError:在“默认”附近:语法错误

1 个答案:

答案 0 :(得分:1)

不直接回答您的问题,但是可以使用以下命令轻松,快速地(尤其是大的)导入csv:

import Foundation

func MyCallback(_ id: String, _ with: Any?) -> String{
    return "My.callback('\(id)', \(with != nil ? with is Numeric ? with! : "'\(with!)'" : "void 0"));"
}

或通过将这些行放入文件(myfile)并执行(在Python,NodeJS ...命令行下)

.open databasePath
.mode csv
.separator ; /* or , */
.import csvFilePath tableName

它还会创建一个foo空数据库,您可能必须删除它,而不会太麻烦。

可能的缺点:您得到一个表,该表与csv共享相同的标头名称,并且类型可能不是所需的。 但是,这可以通过从导入数据库创建另一个数据库并执行数据转换来解决……这就是另一个故事。

主要优点:这是一个简单明了的过程,您拥有一个反映csv源的表,您可以从中构建以下步骤。