Автоинкремент на составной первичный ключ - 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,

Если это все еще не совсем то, что вы хотите (скажем, идентификаторы вообще не должны быть уникальными), вам, вероятно, придется использовать триггер, чтобы автоинкремент работал.

Другие вопросы по тегам