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

时间:2014-05-09 22:00:30

标签: python sqlite pandas

我想将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'不在。我尝试将数据框附加到NewT​​able。

from pandas.io import sql 
sql.write_frame(test,name='NewTable',con=conn,if_exists='append')

这会引发错误:

IntegrityError: column ID is not unique

错误可能是密钥'L1'已经在NewTable中。数据框中的任何条目都不会附加到NewT​​able。但是,我可以毫无问题地将具有新密钥的数据帧附加到NewT​​able。

是否有一种简单的方法(例如,没有循环)将Pandas数据帧附加到sqlite表,以便附加数据帧中的新键,但表中已存在的键不是?

感谢。

2 个答案:

答案 0 :(得分:8)

您可以使用SQL功能insert or replace

query=''' insert or replace into NewTable (ID,Name,Age) values (?,?,?) '''
conn.executemany(query, test.to_records(index=False))
conn.commit()

答案 1 :(得分:0)

http://pandas.pydata.org/pandas-docs/version/0.13.1/generated/pandas.io.sql.write_frame.html

好奇,如果你尝试replace

if_exists: {‘fail’, ‘replace’, ‘append’}, default ‘fail’