How to correctly set AUTO INCREMENT fo a column in SQLite, using Python? How to correctly set AUTO INCREMENT fo a column in SQLite, using Python? sqlite sqlite

How to correctly set AUTO INCREMENT fo a column in SQLite, using Python?


In SQLite, INTEGER PRIMARY KEY column is auto-incremented. There is also an AUTOINCREMENT keyword. When used in INTEGER PRIMARY KEY AUTOINCREMENT, aslightly different algorithm for Id creation is used.

#!/usr/bin/pythonimport sqlite3data_person_name = [('Michael', 'Fox'),                    ('Adam', 'Miller'),                    ('Andrew', 'Peck'),                    ('James', 'Shroyer'),                    ('Eric', 'Burger')]con = sqlite3.connect(":memory:")with con:    c = con.cursor()    c.execute('''CREATE TABLE q1_person_name                 (name_id INTEGER PRIMARY KEY,                  first_name varchar(20) NOT NULL,                  last_name varchar(20) NOT NULL)''')    c.executemany('INSERT INTO q1_person_name(first_name, last_name) VALUES (?,?)', data_person_name)    for row in c.execute('SELECT * FROM q1_person_name'):        print(row)

This code now works OK.

c.executemany('INSERT INTO q1_person_name(first_name, last_name) VALUES (?,?)', data_person_name)

When using auto-increment, we have to explicitly state the column names, omitting theone that is auto-incremented.

$ ./test.py (1, u'Michael', u'Fox')(2, u'Adam', u'Miller')(3, u'Andrew', u'Peck')(4, u'James', u'Shroyer')(5, u'Eric', u'Burger')

This is the output of the code example.


Replace the first ? in executemany statement with null.

So the following line can be rewritten:

c.executemany('INSERT INTO q1_person_name VALUES (?,?,?)', data_person_name)

as

c.executemany('INSERT INTO q1_person_name VALUES (null,?,?)', data_person_name)


It seems that you've done it already. So there's no need to reference that field when you insert.

INSERT INTO q1_person_name (first_name, last_name) VALUES (?,?)