尝试将数据插入数据库但出现此错误:KeyError:'identifier'(Python)

时间:2018-04-13 14:03:39

标签: python csv python-requests

我想要实现的是从API端点获取数据并将其存储为CSV。然后将CSV文件导入SQLite数据库。我可以很好地从API获取数据并输出CSV文件。但是将CSV文件中的数据存储到SQLite中是个问题。我一直收到这个错误:

Traceback (most recent call last):
   File "info.py", line 46, in <module>
     i['col1'], i['col2'], i['col3'], 
     i['col4'], i['col5']) for i in dr]
   File "info.py", line 46, in <listcomp>
     i['col1'], i['col2'], i['col3'], 
     i['col4'], i['col5']) for i in dr]
KeyError: 'col1'

我想知道为什么会出现这个错误?

如果有任何其他解决方案,我很乐意并愿意提供帮助。目标是将CSV文件中的数据存储到SQLite数据库中。

这是我到目前为止所拥有的:

import requests
import csv
import sqlite3


con = sqlite3.connect("business.db")
cur = con.cursor()

cur.execute('DROP TABLE IF EXISTS firms')

cur.execute(
 "CREATE TABLE firms (col1 PRIMARY KEY, col2 TEXT, col3 TEXT, "
 "col4 TEXT, col5 TEXT,...);"
 )

r = requests.get('http://url/url/url')

outfile = open(r"C:\Users\...\test.csv", "w")
outfile.write(r.text)


with open(r'C:\Users\...\...\test.csv', 'r') as fin: 
dr = csv.DictReader(fin) 
to_db = [(i['col1'], i['col2'], i['col3'], i['col4'], i['col5'], ...) for i in dr]


cur.executemany("INSERT INTO firms (col1, col2, col3, col4, col5,  "...) VALUES (?, ?, ?, ?, ?, "
                "...);", to_db)
con.commit()
con.close()

此命令的输出(print(next(dr))):

OrderedDict([('col1;"col2";"col3";"col4";"col5";"..."', 'value1;"value2";                                                     
"value3";"value4";"value5";"..."')])

1 个答案:

答案 0 :(得分:1)

csv文件中的分隔符为';',而不是默认的','。所以它将整行读作一个条目,因为它试图将它拆分为不存在的逗号。

使用dr = csv.DictReader(fin, delimiter=';')