在Python中使用SQLite将.csv文件导入SQL数据库
我有2个.txt文件,我使用将它们转换为.csv文件。现在,我想使用Python中的SQLite将这两个.csv文件导入两个数据库(UI是Jupyter Notebook)。这两个.csv文件的标签分别为person.csv和person\u voces.csv。所以,我按照这里给出的代码()来做: 我不明白为什么当我尝试执行上面的代码时,我总是收到错误消息:“KeyError:'personid'”。有人能帮忙吗 另外,如果我在同一个Python文件中为文件person\u vots.csv创建另一个名为to_db2的数据库表,下面的查询是否会给出两个表之间的所有common元素:在Python中使用SQLite将.csv文件导入SQL数据库,python,sqlite,csv,Python,Sqlite,Csv,我有2个.txt文件,我使用将它们转换为.csv文件。现在,我想使用Python中的SQLite将这两个.csv文件导入两个数据库(UI是Jupyter Notebook)。这两个.csv文件的标签分别为person.csv和person\u voces.csv。所以,我按照这里给出的代码()来做: 我不明白为什么当我尝试执行上面的代码时,我总是收到错误消息:“KeyError:'personid'”。有人能帮忙吗 另外,如果我在同一个Python文件中为文件person\u vots.csv创
select ID from to_db, to_db2 WHERE to_db.ID == to_db2
指向上面两个.csv文件的链接位于此处: 您的
INSERT-to…
语句中可能缺少一些列名
将主键也保留为
NULL
可能不是很好的做法。这对我在Windows 10上很有效,但在Linux/Unix下也应该有效。有几个问题:
我尝试了他们的指令,但在他们的第一行代码(
csvsql-I sqlite3 person.csv
)中失败了。语法错误:sqlite3的语法无效(what???@cricket_007:您能告诉我为什么会出现这个错误吗?我已经导入了csvkit,并在Anaconda中将csvkit安装到我的环境中;请再检查一下那一页。说sqlite
感谢您的回复。我的Python版本是3.0+,因此它没有sqlite。它只有sqlite3,但我相信它们没有太大的不同。谢谢您的评论。我确实指定了主键=personID。你错过了吗?除此之外,我得到的错误来自这一行:to_db=[(I['personid',I['age',],I['sex',],I['primary_voting_address_id',I['state_code',],I['state_flips',],I['country_fips',I['city',I['zipcode',I['zip4']),因为我在dr中,
,所以我不确定插入代码的原因是什么。老实说,我在指定所有列名时仍然收到相同的错误消息。在我尝试将所有列名添加到插入到…
中之后,我从光标获得了一条新的错误消息。执行…
语句:操作错误:table person已经存在。
如果我将表名从person
更改为person1
,我会在第11行得到原始错误消息:keyrerror:'personid'。不确定原因:(@Marichyasana:personID是唯一的,不是吗?你看了.csv文件了吗?@Marichyasana:你能通过修复我上面的代码尝试导入两个csv文件,并告诉我出了什么问题吗?我仍然不明白为什么会出现这个错误:(@ghjk我用wget下载了这两个文件,并用csvlint检查了第一个文件,用R检查了一点。给我一点时间,我会看看。非常感谢您的帮助,先生!如果我在执行您的代码时遇到任何问题,我会立即尝试并让您知道。到目前为止,我还没有看到您和我的代码之间的区别,除了pt行dr=csv.DictReader(person\u table,delimiter='\t')
Btw,您知道DictReader()是否
函数使用txt文件?显然,当我试图使用convertio.co网站将我的person.txt
文件转换为.csv
文件时,它只包含一部分数据。@ghjk这取决于txt文件的组织方式,你有指向它的链接吗?我有!!这是你需要的链接:。请告诉我你的位置对于txt文件,上述代码不起作用?如果是这种情况,如何修复它?基本上,txt文件必须在列中组织,列之间有一个选项卡。如果缺少一个值,则将有两个选项卡。两个txt文件都可以正常工作。例如,如果某个值具有嵌入的选项卡,则必须对其进行编辑以使用引号。一个非常简单的测试是用Excel打开txt文件。
select ID from to_db, to_db2 WHERE to_db.ID == to_db2
import sqlite3, csv
# con = sqlite3.connect(":memory:")
con = sqlite3.connect("person.db")
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:
dr = csv.DictReader(person_table, delimiter='\t') # comma is default delimiter
to_db = [(i['personid'], i['age'], i['sex'], i['primary_voting_address_id'], i['state_code'], i['state_fips'], i['county_name'], i['county_fips'], i['city'], i['zipcode'], i['zip4']) for i in dr]
cur.executemany("INSERT INTO person VALUES (?,?,?,?,?,?,?,?,?,?,?);", to_db)
con.commit()