SQLite更新或覆盖重复项

时间:2019-07-05 20:20:15

标签: python sql sqlite insert

这是我创建表格的方式:

--shortstat

这是我的sqlite插入方法:

c.execute("""CREATE TABLE Campaigns (
            day text,
            firstname text,
            lastname, text)""")

我想要的是此插入函数来覆盖现有记录。

例如,如果我已经插入:

def insert_campaign(Day, FirstName, LastName):
        with conn:
                c.execute("INSERT INTO Campaigns VALUES (:day, :firstname, :lastname)", 
                {'day':Day,'firstname':FirstName, 'lastname':LastName})

我要插入:

3/25/2019 | John | Doe
3/26/2019 | Jane | Doe
3/27/2019 | Bob | Dylan

我希望结果是:

3/26/2019 | Jane | Doe
3/27/2019 | Bob | Dylan
3/28/2019 | Greg | Rogers

现在,它正在添加所有内容,导致6行重复。

1 个答案:

答案 0 :(得分:1)

首先,如果不想重复,则需要将所有三列的组合定义为唯一键或主键:

c.execute("""CREATE TABLE Campaigns (
            day TEXT NOT NULL,
            firstname TEXT NOT NULL,
            lastname TEXT NOT NULL,
            PRIMARY KEY (day, firstname, lastname))""")

然后,您可以使用replace语句:

def insert_campaign(Day, FirstName, LastName):
    with conn:
            c.execute("REPLACE INTO Campaigns VALUES (:day, :firstname, :lastname)", 
            {'day':Day,'firstname':FirstName, 'lastname':LastName})