pandas dataframe to_sql 用于使用 sqlalchemy 替换和添加新内容

Phi*_*ser 0 python sql-server sqlalchemy pandas

我正在尝试在 SQL DB 中更新并添加新的数据框架 pandas 数据框架。

我有两个查询:一个是导入 DF 中的所有数据(超过 100.000),并使用以下代码将其与 sql 表进行比较:

df.to_sql(table_name, con=engine, if_exists='replace', index=False)
Run Code Online (Sandbox Code Playgroud)

第二个是相同的导入和查询,但只是将特定时间段内的数据导入到数据框中,并将其导入到同一个sql表中。使用的代码是相同的:

 df.to_sql(table_name, con=engine, if_exists='replace', index=False)
Run Code Online (Sandbox Code Playgroud)

我的问题是:当我使用第二个代码时,它删除了 sql 表中不存在于我的第二个代码(部分导入)中的所有现有数据。

有人可以给我建议吗?

有关信息,ma 数据库位于 Azure 上

谢谢,新年快乐

Erf*_*fan 7

if_exists='replace'不是逐行操作。因此,它不会检查每一行是否已存在,而只会替换该特定行。它检查整个表是否已经存在,如果找到该表,它将删除旧表并插入新表。

引用自文档

替换:在插入新值之前删除表。

我认为你应该做的是使用if_exists='append'然后检查重复的行并将其删除。目前这将是最安全的方法。

您正在寻找的方法正在 atm 上运行并被称为upsert,这只会插入不“冲突”的记录,并且您可以优先考虑新记录或旧记录。查看GitHub门票