Python 在MySQL数据库中保存数据帧的最快方法是什么
我正在用python编写代码,根据另一个数据库中的另一个mysql表生成和更新一个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(这根本不起作用)。我想知
中的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管理)