使用python将多行导入具有唯一约束的SQL表

时间:2019-02-25 18:56:18

标签: python sql

我正在尝试将多行导入到我的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约束的其余行,并且不会插入任何内容,

如何在不循环访问列表的情况下插入不违反约束的行?我将要导入大量数据,并且遍历每个元素将花费很长时间。

谢谢。

1 个答案:

答案 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 )