2011-07-22 34 views
2

私はこの複合主キーの自動インクリメント - 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))') 

これはベース表の細かい行を挿入BUT、ID列が全てで増分自動ない試みました。

どうすればよいですか?何か案が?

答えて

10

sqliteでは、整数列がプライマリキーの場合にのみ、自動インクリメントの動作を行います。複合キーはオートインクリメントが有効にならないようにします。

idを唯一の主キーとして定義してから、id, col3に一意の制約を追加すると、同様の結果が得られます。

これはまだあなたが望むものではない(たとえば、idは一意である必要はありません)場合は、自動インクリメントを行うためにトリガーを使用する必要があります。

+0

素晴らしい!これを説明してくれてありがとう。私は主キーの整数としてIDを作成し、Col2に一意の制約を追加するつもりだと思う。ありがとうございました! –

関連する問題