我想要实现的是从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";"..."')])
答案 0 :(得分:1)
csv文件中的分隔符为';'
,而不是默认的','
。所以它将整行读作一个条目,因为它试图将它拆分为不存在的逗号。
使用dr = csv.DictReader(fin, delimiter=';')