Reputation: 1601
Here is how I create the table:
c.execute("""CREATE TABLE Campaigns (
day text,
firstname text,
lastname, text)""")
Here is my sqlite insert method:
def insert_campaign(Day, FirstName, LastName):
with conn:
c.execute("INSERT INTO Campaigns VALUES (:day, :firstname, :lastname)",
{'day':Day,'firstname':FirstName, 'lastname':LastName})
What I want is for this insert function to overwrite existing records.
For example if I already inserted:
3/25/2019 | John | Doe
3/26/2019 | Jane | Doe
3/27/2019 | Bob | Dylan
And I want to insert:
3/26/2019 | Jane | Doe
3/27/2019 | Bob | Dylan
3/28/2019 | Greg | Rogers
I want the result to be:
3/25/2019 | John | Doe
3/26/2019 | Jane | Doe
3/27/2019 | Bob | Dylan
3/28/2019 | Greg | Rogers
Right now it is adding everything, resulting in 6 rows, with duplicates.
Upvotes: 1
Views: 763
Reputation: 311163
First, if you do not want duplicates, you need to define the combination of all three columns as a unique or primay key:
c.execute("""CREATE TABLE Campaigns (
day TEXT NOT NULL,
firstname TEXT NOT NULL,
lastname TEXT NOT NULL,
PRIMARY KEY (day, firstname, lastname))""")
Then, you could use the replace
statement:
def insert_campaign(Day, FirstName, LastName):
with conn:
c.execute("REPLACE INTO Campaigns VALUES (:day, :firstname, :lastname)",
{'day':Day,'firstname':FirstName, 'lastname':LastName})
Upvotes: 1