SQLite Обновление или перезаписать дубликаты - PullRequest
1 голос
/ 05 июля 2019

Вот как я создаю таблицу:

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

Вот мой метод вставки sqlite:

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

Я хочу, чтобы результат был:

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

Сейчас он добавляет все, в результате чего получается 6 строк с дубликатами.

1 Ответ

1 голос
/ 05 июля 2019

Во-первых, если вы не хотите дубликатов, вам нужно определить комбинацию всех трех столбцов как уникальный или первичный ключ:

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})
...