我想在mysql中"插入忽略"整个pandas数据框。有没有一种方法可以在不遍历行的情况下做到这一点?
在dataframe。我只看到选项if_exists 'append',但这仍然会继续重复的唯一键吗?
考虑使用一个临时表(具有最终表的确切结构),它总是被pandas替换,然后在游标调用中运行INSERT IGNORE
:
dataframe.to_sql('myTempTable', con, if_exists ='replace')
cur = con.cursor()
cur.execute("INSERT IGNORE INTO myFinalTable SELECT * FROM myTempTable")
con.commit()
在熊猫中没有办法做到这一点,直到当前版本的pandas (0.20.3)
。
选项if_exists
仅适用于表(不适用行),如文档中所述。
if_exists : {‘fail’, ‘replace’, ‘append’}, default ‘fail’
fail
:如果表存在,不做任何操作
replace
:如果表存在,删除它,重新创建,然后插入数据
append
:如果表存在,则插入数据。Create if不存在
这将减慢进程,因为您每次插入一行
for x in xrange(data_frame.shape[0]):
try:
data_frame.iloc[x:x+1].to_sql(con=sql_engine, name="table_name", if_exists='append')
except IntegrityError:
# Your code to handle duplicates
pass