熊猫to_sql()更新数据库中的唯一值?

时间:2018-09-05 15:11:04

标签: python sql pandas pandas-to-sql

如何使用df.to_sql(if_exists = 'append')仅在数据框和数据库之间附加唯一值。换句话说,我想评估DF和DB之间的重复项,并在写入数据库之前删除这些重复项。

有为此参数吗?

我知道参数if_exists = 'append'if_exists = 'replace'适用于整个表格,而不是唯一的条目。

I am using: 
sqlalchemy

pandas dataframe with the following datatypes: 
    index: datetime.datetime <-- Primary Key
    float
    float
    float
    float
    integer
    string <---  Primary Key
    string<----  Primary Key

我对此一无所知,非常感谢您的帮助。 -谢谢

1 个答案:

答案 0 :(得分:3)

在熊猫中,to_sql中没有方便的参数将仅非重复项附加到最终表。考虑使用一个临时临时表,该临时临时表会被总是熊猫替换,然后运行最终追加查询以将临时表记录迁移到最终表中,仅使用NOT EXISTS子句考虑到唯一的PK。

engine = sqlalchemy.create_engine(...)

df.to_sql(name='myTempTable', con=engine, if_exists='replace')

with engine.begin() as cn:
   sql = """INSERT INTO myFinalTable (Col1, Col2, Col3, ...)
            SELECT t.Col1, t.Col2, t.Col3, ...
            FROM myTempTable t
            WHERE NOT EXISTS 
                (SELECT 1 FROM myFinalTable f
                 WHERE t.MatchColumn1 = f.MatchColumn1
                 AND t.MatchColumn2 = f.MatchColumn2)"""

   cn.execute(sql)

这将是ANSI SQL解决方案,并且不限于特定于供应商的方法,例如UPSERT,因此实际上与所有SQL集成的关系数据库兼容。