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

Sop*_*hus 5 python mysql sqlite sqlalchemy python-2.7

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

Len*_*ena 0

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

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

ls = [[1,"John"], [2,"Mary"], [3,"Jude"], [4,"John"]]
Run Code Online (Sandbox Code Playgroud)

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

  1. 浏览清单
  2. 将名称作为键存储在字典中。键值对是:"name": 1
  3. 每次字典中已有一个现有键(名称)时,不要存储到新列表中
ls = [[1,"John"], [2,"Mary"], [3,"Jude"], [4,"John"]]
Run Code Online (Sandbox Code Playgroud)