通过主键将Pandas数据框附加到sqlite表中
我想把一个Pandas数据框添加到一个叫做'NewTable'的sqlite数据库里的现有表格中。NewTable有三个字段(ID、Name、Age),其中ID是主键。我的数据库连接是:
import sqlite3
DB='<path>'
conn = sqlite3.connect(DB)
我想添加的数据框是:
test=pd.DataFrame(columns=['ID','Name','Age'])
test.loc[0,:]='L1','John',17
test.loc[1,:]='L11','Joe',30
如上所述,ID在NewTable中是主键。键'L1'已经在NewTable里了,但键'L11'还没有。我尝试把这个数据框添加到NewTable中。
from pandas.io import sql
sql.write_frame(test,name='NewTable',con=conn,if_exists='append')
这时出现了一个错误:
IntegrityError: column ID is not unique
这个错误很可能是因为键'L1'已经在NewTable中存在。数据框中的条目没有被添加到NewTable里。不过,我可以把带有新键的数据框添加到NewTable中,没有问题。
有没有简单的方法(比如,不用循环)可以把Pandas数据框添加到sqlite表中,这样数据框里的新键可以被添加,而已经存在于表中的键则不被添加呢?
谢谢。
2 个回答
1
我很好奇你有没有试过 replace
呢?
if_exists: {‘fail’, ‘replace’, ‘append’}, default ‘fail’
12
你可以使用SQL的功能 insert or replace
。
query=''' insert or replace into NewTable (ID,Name,Age) values (?,?,?) '''
conn.executemany(query, test.to_records(index=False))
conn.commit()