【发布时间】:2017-09-03 22:47:27
【问题描述】:
我有 2 个 .txt 文件,我使用 https://convertio.co/csv-xlsx/ 将它们转换为 .csv 文件。现在,我想在 Python 中使用 SQLite 将这两个 .csv 文件导入两个数据库(UI 是 Jupyter Notebook)。这两个 .csv 文件被标记为 person.csv 和 person_votes.csv。所以,我按照这里给出的代码 (Importing a CSV file into a sqlite3 database table using Python) 做到了:
import sqlite3, csv
con = sqlite3.connect(":memory:")
cur = con.cursor()
cur.execute("CREATE TABLE person (personid STR,age STR,sex STR,primary_voting_address_id STR,state_code STR,state_fips STR,county_name STR,county_fips STR,city STR,zipcode STR, zip4 STR, PRIMARY KEY(personid))")
with open('person.csv','r') as person_table: # `with` statement available in 2.5+
# csv.DictReader uses first line in file for column headings by default
dr = csv.DictReader(person_table) # comma is default delimiter
#personid age sex primary_voting_address_id state_code state_fips county_name county_fips city zipcode zip4
to_db = [(i['personid'], i['age'], i['sex'], i['primary_voting_address_id'], i['state_code'], i['state_flips'], i['county_name'], i['county_fips'], i['city'], i['zipcode'], i['zip4']) for i in dr]
cur.executemany("INSERT INTO t (age, sex) VALUES (?, ?);", to_db)
con.commit()
我不明白为什么当我尝试执行上面的代码时,我不断收到错误消息:“KeyError: 'personid'”。有人可以帮忙吗?
另外,如果我在同一个 Python 文件中为文件 person_votes.csv 创建另一个名为 to_db2 的数据库表,以下查询是否会为我提供所有 两个表格之间的共同元素:
select ID from to_db, to_db2 WHERE to_db.ID == to_db2
上面两个 .csv 文件的链接在这里:https://drive.google.com/open?id=0B-cyvC6eCsyCQThUeEtGcWdBbXc。
【问题讨论】:
-
我尝试了他们的指令,但在他们的第一行代码上失败了 (
csvsql -i sqlite3 person.csv) SyntaxError: invalid syntax at sqlite3 (what??) -
@cricket_007:你能告诉我为什么会出现这个错误吗?我已经导入了 csvkit,并将 csvkit 安装到我在 Anaconda 的环境中;p
-
再次检查该页面。说
sqlite -
感谢您的回复。我的 Python 版本是 3.0+,所以它没有 sqlite。它只有 sqlite3,但我相信它们并没有太大的不同。