【问题标题】:SQLAlchemy - bulk insert ignore: "Duplicate entry"SQLAlchemy - 批量插入忽略:“重复条目”
【发布时间】:2016-07-29 07:28:56
【问题描述】:

我有一个名为user_data 的表,列iduser_id 作为唯一键。我想将一些历史数据导入到这个表中。我使用bulk_insert_mappings 方法批量插入数据。但有如下错误:

IntegrityError: (pymysql.err.IntegrityError) (1062, u"Duplicate entry '1-1234' for key 'idx_on_id_and_user_id'")

批量插入时如何忽略此错误并丢弃重复数据?

【问题讨论】:

标签: python mysql sqlalchemy


【解决方案1】:

您应该处理每个错误。但是,如果您真的只想忽略所有错误,则无法真正进行批量插入。有时,您正在导入的实际数据会出现完整性错误。您必须一一插入并忽略。我只会在一次性脚本中使用它。

for item in dict_list:
    try:
        session.merge(orm(**item))
        session.commit()
    except Exception as e:
        session.rollback()

【讨论】:

  • 不应该合并已经工作没有任何异常?请注意,合并和回滚都会使插入非常慢
  • 对大型列表中的每一项都使用 session.commit() 会导致 I/O 异常繁重且性能不佳。
  • 在插入之前预处理数据并修复错误始终是一等奖。在不知道这一点的情况下,仍然经常存在您只想获取至少数据库中的数据的用例。例如,在演示之前,性能真的无关紧要。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-23
  • 1970-01-01
  • 2011-01-14
  • 2012-08-07
  • 1970-01-01
  • 2019-03-11
  • 2016-11-29
相关资源
最近更新 更多