我有一个名为user_data
, 列id
and user_id
作为唯一的密钥。我想将一些历史数据导入到该表中。我用批量插入映射 http://docs.sqlalchemy.org/en/rel_1_0/orm/session_api.html#sqlalchemy.orm.session.Session.bulk_insert_mappings批量插入数据的方法。但存在如下错误:
IntegrityError:(pymysql.err.IntegrityError)(1062,u“密钥‘idx_on_id_and_user_id’的重复条目‘1-1234’”)
批量插入时如何忽略这个错误并丢弃重复数据?
您可以使用 sqlalchemy 核心 API 进行大批量插入,但它特定于数据库。为了使用 postgres 的人 https://docs.sqlalchemy.org/en/20/dialects/postgresql.html#sqlalchemy.dialects.postgresql.Insert.on_conflict_do_nothing,它看起来像这样:
rows = [
{"id": 1, "name": "foo"},
{"id": 1, "name": "foo-dupe"},
]
stmt = insert(YourTableName).values(rows)
stmt = stmt.on_conflict_do_nothing(
index_elements=["id_or_column_causing_integrity_error", "colB"]
)
db.session.execute(stmt)
db.session.commit()
请注意,值index_elements
获取一个列表,其中包含构成要忽略的唯一索引的一个或多个列名称。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)