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

Python 在MySQL数据库中保存数据帧的最快方法是什么,python,mysql,pandas,Python,Mysql,Pandas,我正在用python编写代码,根据另一个数据库中的另一个mysql表生成和更新一个mysql表 我的代码执行如下操作: 对于日期范围内的日期: 在db1中查询两个日期之间的数量 用pandas=>df做一些工作 在db2中删除带有df中ID的行 使用df.to_sql保存df 操作1-2所需时间少于2秒,而3-4所需时间最多为10秒。第四步比第三步多4次。如何改进代码以提高编写过程的效率 我已经为第3步和第4步划分了df。我将中的method=multi添加到了_sql(这根本不起作用)。我想知

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

我的代码执行如下操作:

对于日期范围内的日期:

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

  • 用pandas=>df做一些工作

  • 在db2中删除带有df中ID的行

  • 使用df.to_sql保存df

  • 操作1-2所需时间少于2秒,而3-4所需时间最多为10秒。第四步比第三步多4次。如何改进代码以提高编写过程的效率

    我已经为第3步和第4步划分了df。我将
    中的
    method=multi
    添加到了_sql
    (这根本不起作用)。我想知道我们是否能做得更好

    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')
    

    谢谢你的帮助

    我发现
    df.to\u sql
    是一个非常慢的程序。我解决这个问题的一种方法是将数据帧输出到一个csv文件中,使用
    df.tocsv
    ,并使用BCP in将csv中的数据插入到表中,然后在插入完成后删除csv文件。您可以使用subprocess在python脚本中运行BCP。

    我在尝试将SQL Server表复制到MySQL时遇到了一个非常类似的问题,即如何处理插入和更新。我的理解是,删除是一项繁重的任务,它花费了我几个小时,有时还会锁定表。最后我使用了一个MySQL语句,比如“在重复键更新c1=v1,c2=v2,…”中插入表(列列表)值(值列表);实际上,更长的操作才是真正的。对于sql,我尝试过
    加载数据填充
    ,速度快了10到100倍(取决于行数)。但是,在云SQL上禁止此操作(由google Cloud管理)