通过主键将Pandas数据框附加到sqlite表中

16 投票
2 回答
15027 浏览
提问于 2025-04-18 06:03

我想把一个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()

撰写回答