在MySQL数据库中保存pandas数据帧的最快方法是什么?

0 人关注

我正在用python写一段代码,根据另一个数据库的另一个mysql表生成和更新一个mysql表。

My code does something like this:

对于一个日期范围内的日期。

  • 在db1中查询2个日期之间的一个数量

  • Do some work in pandas => df

  • 在db2中删除df中带有ids的记录

  • 用df.to_sql保存df

  • 第1-2步的操作耗时不到2秒,而第3-4步可能需要10秒。第4步比第3步多花了4次。我如何改进我的代码,使编写过程更有效率

    我已经为步骤3和4的df进行了分块。我已经在 .to_sql 中加入了 method=multi (这根本不起作用)。我在想,我们是否可以做得更好。

    with db.begin() as con:
        for chunked in chunks(df.id.tolist(), 1000):
            _ = con.execute(""" DELETE FROM table where id 
                                in {} """.format(to_tuple(chunked)))
        for chunked in chunks(df.id.tolist(), 100000):        
            df.query("id in @chunked").to_sql('table', con, index=False, 
            if_exists='append')