在我的项目中,我使用SQLAlchemy和bulk_save_objects()
- 函数。对我来说,它是批量插入大量行的一种快捷方式。我已经设置了我的数据库(当前是SQLite),因此不需要重复的条目。当我尝试插入大量项目时,我不知道是否有重复的条目,并且我运行程序SQLAlchemy引发了IntegrityError异常,表示有重复的条目。这是我的问题:如何处理重复条目中的bulk_save_objects()
- 函数?
当我使用SQLalchemy的add()
函数时,很容易在for循环中捕获IntegrityError异常并忽略它。但是add()
- 函数对于大量项目来说效果太慢。
答案 0 :(得分:0)
如果您正在使用bulk_save_objects,我假设您从列表中的值开始。如果没有,您可以做的就是先将对象列表转换为值列表。
假设您的[ID,名称]列表中有一个重复的约翰: ls = [[1,John],[2,Mary],[3,Jude],[4,John]]
因此,John是重复的,您只想保留第一个“ John”值。 您要做的是: 1.浏览清单 2.将名称存储在字典中作为键。键值对为:“名称”: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)