在我的项目中,我使用带有bulk_save_objects()
-函数的sqlalchemy。对我来说,批量插入大量行是一种快速有效的方法。我已经设置了数据库(当前为sqlite),因此不需要重复的条目。当我试图插入大量项时,我不知道是否有重复项,我运行程序sqlalchemy引发integrityerror异常,即有重复项。我的问题是:如何处理重复条目中的bulk_save_objects()
-函数?
当我使用sqlalchemy的add()
-函数时,很容易在for循环中捕获integrityerror异常并忽略它。但是对于大量的项目,add()
-函数工作得太慢。
最佳答案
如果您使用的是bulk_save_对象,我假设您是从列表中的值开始的。否则,您可以首先将对象列表转换为值列表。
假设你的[身份证,姓名]名单上有一个重复的约翰:
ls=[[1,约翰],[2,玛丽],[3,裘德],[4,约翰]]
所以约翰是重复的,你只想保留第一个“约翰”值。
你要做的是:
1。浏览列表
2。把名字作为钥匙储存在字典里。键值对是:“name”:1
三。每当字典中已经有一个现有的键(名称)时,不要存储到新列表中
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)