在mysqldb中带有sqlAlchemy重复条目的Pandas to_sql错误

时间:2014-07-22 04:51:50

标签: pandas sqlalchemy

我正在使用带有SQLAlchemy的PANDAS来使用DataFrame.to_sql写入MYSQL数据库。我想打开'append' --> df.to_sql(con=con, name='tablename', if_exists='append')的标志因为程序在白天对表执行了几次小写操作,所以我不希望整个表被替换为replace。我定期得到重复输入错误:

sqla: valuesToCalc has error:  (IntegrityError) (1062, "Duplicate entry 
 '0-0000-00-00-00:00:00' for key 'PRIMARY'") 'INSERT INTO valuesToCalc () VALUES ()' ()

是否可以将语法"on duplicate key update"添加到pd.to_sql?我是否必须停止使用to_sql并直接使用sqlAlchemy?我希望不要。

2 个答案:

答案 0 :(得分:8)

不确定您是否找到了答案,但这是一个对我有用的解决方法:

在临时表上调用.to_sql(),然后使用查询使用临时表更新主表。然后你可以删除临时表。例如:

df.to_sql(con=con, name='tablename_temp', if_exists='replace')
connection = con.connect()
connection.execute(text("INSERT INTO tablename SELECT * FROM tablename_temp ON DUPLICATE KEY UPDATE tablename.field_to_update=tablename_temp.field_to_update"))
connection.execute(text('DROP TABLE tablename_temp '))

答案 1 :(得分:4)

这是我最终做的事情:

bash
相关问题