Cruncher
Cruncher

Reputation: 7812

sqlite3 insert not committing

When trying to insert rows into a table with a unique index, it appears to simply silently not insert.

I've captured the behaviour in the following program: on the second call to test_insert I should get an integrity violation on the unique key. But nothing. Also, if I take the c.execute(query, [id_to_test]) line and duplicate itself below it, I do receive the proper integrity constraint as expected. What's happening here?

import sqlite3

def test_insert(id_to_test):
    conn = sqlite3.connect('test.db')
    c = conn.cursor()

    query = '''INSERT INTO test(unique_id)
               VALUES(?)'''

    c.execute(query, [id_to_test])

def setup_table():
    conn = sqlite3.connect('test.db')
    c = conn.cursor()

    c.execute('''DROP TABLE IF EXISTS test''')

    c.execute('''CREATE TABLE test (unique_id text)''')
    c.execute('''CREATE UNIQUE INDEX test_unique_id ON test (unique_id)''')

if __name__ == '__main__':
    setup_table()
    test_insert('test_id')
    test_insert('test_id')
    test_insert('test_id')

Upvotes: 1

Views: 2811

Answers (1)

Matt
Matt

Reputation: 314

At the end of database operations, commit the changes to the database:

conn.commit()

Upvotes: 2

Related Questions