我正在尝试在SQL DB中的熊猫数据帧中更新和添加新数据帧。
我有2个查询:一个是在DF中导入所有数据(超过100.000),并使用以下代码将其与sql表进行比较:
df.to_sql(table_name, con=engine, if_exists='replace', index=False)
第二个是相同的导入和查询,只是将特定时间段内的数据导入数据帧并导入同一sql表中。使用的代码是相同的:
df.to_sql(table_name, con=engine, if_exists='replace', index=False)
我的问题是:当我使用第二个代码时,它将删除第二个代码中不存在的sql表中的所有现有数据(部分导入)。
有人可以给我建议吗?
有关信息,数据库位于Azure上
谢谢,新年快乐
这if_exists='replace'不是明智的操作。所以它并不能检查,如果各行已经存在,并且将只替换特定行。它检查整个表是否已经存在,如果找到表,它将删除旧表并插入新表。
从文档引用:
replace:在插入新值之前删除表。
我认为您应该做的是使用if_exists='append',然后检查重复的行并将其删除。目前,这将是最安全的方法。
您正在寻找的方法正在atm上运行,并且被称为upsert,这只会插入不会“冲突”的记录,并且您可以优先考虑新记录或旧记录。看GitHub票
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。