我正在尝试将多行导入到我的SQL表中,该表以'id'作为 唯一约束,由于违反约束,应该被SQL插入拒绝。
我正在使用PostgreSQL
假设我的数据是
records_to_insert = [ [2,'Jon','2018-01-11', 26] ,
[3,'Jane','2017-12-11', 27],
[4,'Bill','2018-03-23', 26] ]
在数据库中,我已经拥有
2,'Jon','2018-01-11', 26
现在,如果我这样做
cur = db_conn.cursor()
cur.execute("SAVEPOINT bulk_savepoint")
try:
cur.executemany("INSERT INTO mytable VALUES (%s,%s,%s,%s);", records_to_insert )
except:
cur.execute("ROLLBACK TO SAVEPOINT bulk_savepoint")
db_conn.commit()
因为行中有一行违反了我的约束,所以它不会插入不违反id约束的其余行,并且不会插入任何内容,
如何在不循环访问列表的情况下插入不违反约束的行?我将要导入大量数据,并且遍历每个元素将花费很长时间。
谢谢。
答案 0 :(得分:3)
您正在寻找Response is giving me the result but all entries are grouped at one attribute
更改
cur.executemany("INSERT INTO mytable VALUES (%s,%s,%s,%s);", records_to_insert )
到
cur.executemany("INSERT IGNORE INTO mytable VALUES (%s,%s,%s,%s);", records_to_insert )
对于PostgreSQL,请使用INSERT IGNORE
cur.executemany("""
INSERT INTO mytable VALUES (%s,%s,%s,%s)
ON CONFLICT DO NOTHING;""", records_to_insert )