7

我想将整个熊猫数据框“插入忽略”到 mysql 中。有没有办法在不循环行的情况下做到这一点?

在 dataframe.to_sql 我只看到 if_exists 'append' 选项,但这仍然会在重复的唯一键上继续吗?

4

2 回答 2

14

考虑使用始终由 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()
于 2017-08-03T17:54:02.123 回答
1

直到当前版本的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 
于 2017-08-02T17:22:18.127 回答