In the sqlite3 faq, it is mentioned that an integer primary key being fed a null value would autoincrement. But this is not happening for me.
to replicate, a table in sqlite3, CREATE TABLE dummy( serial_num INTEGER PRIMARY KEY, name TEXT); and fill it using python,
import sqlite3 as lite
con = lite.connect('some.db')
cur=con.cursor()
data = "someone's name"
cur.execute("INSERT INTO dummy VALUES(NULL, ?)", data)
con.commit()
The first attribute serial_num is being shown blank while the name attribute is fine. When I do SELECT serial_num FROM dummy I just get a bunch of blank spaces. What am I doing wrong?
This is one of SQLite’s quirks. From the fine manual:
The documentation on INTEGER PRIMARY KEY is a little unclear about what precisely is required for a column to be this special INTEGER PRIMARY KEY that auto-increments but the reality is that the column needs to be NOT NULL if you want to use the NULL value to mean “give me the next auto-incrementing value” when inserting:
If you leave out the
not null, you need to do your inserts like this:to get the auto-increment value for
serial_num. Otherwise, SQLite has no way of telling the difference between a NULL meaning “give me the next auto-increment value” and a NULL meaning “put a NULL value inserial_numbecause the column allows NULLs”.