Автоинкремент на составной первичный ключ - Sqlite3 + Python
У меня есть такой код
c.execute('CREATE TABLE IF NOT EXISTS base (ID INTEGER NOT NULL, col2 TEXT NOT NULL, col3 INTEGER, PRIMARY KEY(ID, col2))')
Этот код дает мне исключение sqlite3.IntegrityError, хотя я очень уверен, что пишу запись впервые.
Итак, я попробовал
c.execute('CREATE TABLE IF NOT EXISTS base (ID INTEGER, col2 TEXT, col3 INTEGER, PRIMARY KEY(ID, col2))')
Это вставляет точную строку в базовую таблицу, НО, столбец ID не увеличивается автоматически.
Что я могу сделать? Любая идея?
1 ответ
В sqlite поведение автоинкремента выдается только тогда, когда первичным ключом является только один целочисленный столбец. составные ключи предотвращают эффект автоинкремента.
Вы можете получить аналогичный результат, определив id
в качестве единственного первичного ключа, но затем добавление дополнительного уникального ограничения на id, col3
,
Если это все еще не совсем то, что вы хотите (скажем, идентификаторы вообще не должны быть уникальными), вам, вероятно, придется использовать триггер, чтобы автоинкремент работал.