【问题标题】:Error in trying to import a CSV file into a sqlite3 database table using Python尝试使用 Python 将 CSV 文件导入 sqlite3 数据库表时出错
【发布时间】:2020-05-19 23:07:22
【问题描述】:

尝试使用 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, 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 , PAY_AMT4, PAY_AMT5, PAY_AMT6, 默认);") sqlite3.OperationalError:接近“默认”:语法错误

【问题讨论】:

  • default 是 SQLite 关键字:sqlite.org/lang_keywords.html 您需要重命名该列。
  • 重命名列并将 'rb' 更改为 'r' 以修复文本错误,但现在得到: Traceback(最近一次调用最后一次):文件“C:\Users\Joseph\Desktop\W7\Wk7test .py",第 11 行,在 to_db = [(i['col1'], i['col2']) for i in dr] 文件 "C:\Users\Joseph\Desktop\W7\Wk7test.py ",第 11 行,在 to_db = [(i['col1'], i['col2']) for i in dr] KeyError: 'col1'

标签: python sqlite csv


【解决方案1】:

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

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

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

sqlite3 foo ".read myfile"

它还会创建一个 foo 空数据库,您可能需要删除它,这不会太痛苦。

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

主要优点:这是一个直接的过程,并且您有一个反映 csv 源的表,您可以从中构建以下步骤。

【讨论】:

    猜你喜欢
    • 2011-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-05
    • 1970-01-01
    • 2014-12-02
    • 2019-07-28
    相关资源
    最近更新 更多