我想将整个熊猫数据框“插入忽略”到 mysql 中。有没有办法在不循环行的情况下做到这一点?
在 dataframe.to_sql 我只看到 if_exists 'append' 选项,但这仍然会在重复的唯一键上继续吗?
我想将整个熊猫数据框“插入忽略”到 mysql 中。有没有办法在不循环行的情况下做到这一点?
在 dataframe.to_sql 我只看到 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
:如果表存在,则插入数据。如果不存在则创建。
通过循环
当您一次插入一行时,这将减慢该过程
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