gpt4 book ai didi

python - SQLAlchemy:如何处理重复条目中的 bulk_save_objects()?

转载 作者:可可西里 更新时间:2023-11-01 09:00:01 24 4
gpt4 key购买 nike

在我的项目中,我将 SQLAlchemy 与 bulk_save_objects() 函数结合使用。对我来说,这是一种批量插入大量行的快速好方法。我已经设置了我的数据库(目前是 SQLite),因此不需要重复的条目。当我尝试插入大量项目时,我不知道是否有重复的条目并且我运行程序 SQLAlchemy 引发了 IntegrityError 异常,表明存在重复的条目。这是我的问题:如何处理重复条目中的 bulk_save_objects() 函数?当我使用 SQLalchemy 的 add() 函数时,很容易在 for 循环中捕获 IntegrityError 异常并忽略它。但是 add() 函数对于大量项目的运行速度太慢。

最佳答案

如果您使用的是 bulk_save_objects,我假设您是从列表中的值开始的。如果没有,您可以先将对象列表转换为值列表。

假设您的 [ID, name] 列表中有一个重复的 John:

ls = [[1,"John"], [2,"Mary"], [3,"Jude"], [4,"John"]]

所以 John 是重复的,您只想保留第一个“John”值。你要做的是:

  1. 浏览列表
  2. 将名称作为键存储在字典中。键值对为:"name": 1
  3. 每次字典中已有键(名称)时,不存储到新列表
dict={}
new_ls=[]
for row in ls:
if row[1] not in dict:
new_ls.append(row)
else:
dict[row[1]] = 1

#now you can convert new_ls to a list of objects:
objects = []
for item in new_ls:
one_object = Person(ID=item[0], name=item[1]
objects.append(one_object)

session.bulk_save_objects(objects)

关于python - SQLAlchemy:如何处理重复条目中的 bulk_save_objects()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47658519/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com