Sqlite 使用 Insert、Executemany 和元组列表避免重复

Sqlite Avoid Duplicates Using Insert, Executemany and list of Tuples

我有一个包含学生资格数据的现有 Sqlite table,代码会定期检查获得的新资格并将其插入 table。这会导致重复。

    def insertQualificationData(data):

        # Run execute many command to insert data
        self.cursor.executemany(
            """
                INSERT INTO qualification  (
                    qualificationperson,
                    type,
                    secondaryreference,
                    reference,
                    name,
                    pass,
                    start,
                    qualificationband,
                    grade,
                    time_stamp
                ) VALUES (?,?,?,?,?,?,?,?,?,?)
            """, data
        )

'data' 变量是一个元组列表。例如:

('209000010111327', 'WLC', 'G0W915', 'Certificate', 'Child Care and Education', 'P', '12/07/2001', 'PASS', 'Pass', 1648018935)

我想防止 'duplicate' 值被插入到资格 table 中,通过 'duplicate' 我的意思是如果一行与 qualificationperson、reference、name & pass 不应插入的列。

我看到其他答案做类似的事情,但使用第二个 table 的命名列,我正在努力使用元组列表和 executemany()

来复制它

您可以在这些列上添加唯一索引:

CREATE UNIQUE INDEX IF NOT EXISTS QData ON qualification (qualificationperson, reference, name, pass)

然后使用 INSERT OR IGNORE 语句,这样一个值插入失败不会导致整个 executemany 失败:

INSERT OR IGNORE INTO qualification (...)