Автоинкремент на составной первичный ключ - Sqlite3 + Python - PullRequest
2 голосов
/ 22 июля 2011

У меня есть такой код

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))')

Вставляет точную строку в таблицу base , НО, столбец ID вообще не увеличивается автоматически.

Что я могу сделать? Есть идеи?

1 Ответ

11 голосов
/ 22 июля 2011

В sqlite вы получаете поведение автоинкремента, только когда первичным ключом является только один целочисленный столбец. составные ключи не дают автоинкременту вступать в силу.

Подобный результат можно получить, определив id в качестве единственного первичного ключа, но затем добавив дополнительное уникальное ограничение для id, col3.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...