首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用pyodbc更快地更新db

如何使用pyodbc更快地更新db
EN

Stack Overflow用户
提问于 2022-07-16 01:52:33
回答 1查看 136关注 0票数 0

我有一个简单的任务,它正在发挥作用,但它正在漫长地完成。任务包括从api (json文件)检索数据,并比较该数据是否已经在数据库上。

如果数据位于数据库= update项上,则on =insert。

为此,我循环遍历数据库上的一组当前item_id,并为每个场景执行语句。例如:

代码语言:javascript
复制
For item in data_json:

   if item[item_id] in setid_db:
    
      cursor.execute(update...)

   else:
    
      cursor.execute(insert...)

已经尝试过fast_executemany,但速度几乎相同。

在另一个任务上,我只需要一次从一个数据中插入所有数据,所以我使用了df.to_sql和method=multi和chunksize = 50,它工作得很好,而且速度更快。只是还不知道如何完成当前任务的等效操作。任何帮助都将不胜感激。

PS.:在第一次将数据从API (例如30k项)加载到数据库之后,可能是在下一个负载上只有200个数据需要更新或插入。因此,在这些场景中使用df.to_sql将覆盖数据库中的所有现有数据。这就是为什么我需要执行这些语句,并且要做得比快得多。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-16 02:34:22

也许您可以将您的data_json预处理为两组:一组需要插入(数据库中不存在),另一组需要更新(数据库中已经存在)。然后,您可以将df.to_sql调用与method="multi"chunksize=50一起使用。您可以使用data_json直接将pandas.DataFrame(data_json)转换为Pandas DataFrame (这里假设data_json是Python对象,可能是字典,而不是JSON格式的字符串)。

如果可以首先将data_json转换为数据帧,则可以运行

代码语言:javascript
复制
df = pd.DataFrame(data_json)
df.loc[lambda D: D.item_id.isin(setid_db), :].to_sql(<UPDATE>)
df.loc[lambda D: ~D.item_id.isin(setid_db), :].to_sql(<INSERT>)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73001030

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档