2011-07-22 4 views
2

J'ai un code comme celui-ciIncrémentation automatique sur Composite Clé primaire - Sqlite3 + Python

c.execute('CREATE TABLE IF NOT EXISTS base (ID INTEGER NOT NULL, col2 TEXT NOT NULL, col3 INTEGER, PRIMARY KEY(ID, col2))') 

Ce code me donne une exception sqlite3.IntegrityError même si je suis sûr que je suis en train d'écrire le record la première fois.

Alors, j'ai essayé

c.execute('CREATE TABLE IF NOT EXISTS base (ID INTEGER, col2 TEXT, col3 INTEGER, PRIMARY KEY(ID, col2))') 

Ceci insère la ligne bien dans la table de base MAIS, colonne ID est pas automatiquement incrémentée du tout.

Que puis-je faire? Une idée?

Répondre

10

En sqlite, vous n'obtenez un comportement d'auto-incrémentation que lorsqu'une seule colonne entière est la clé primaire. les touches composites empêchent l'auto-incrustation de prendre effet.

Vous pouvez obtenir un résultat similaire en définissant id comme seule clé primaire, puis en ajoutant une contrainte unique supplémentaire sur id, col3.

Si ce n'est pas tout à fait ce que vous voulez (disons, les ID n'ont pas besoin d'être uniques du tout), vous devrez probablement utiliser un déclencheur pour faire fonctionner l'auto-incrémentation.

+0

Parfait! Merci d'expliquer cela. Je pense que je vais faire avec ID en tant qu'entier principal et ajouter une contrainte Unique sur Col2. Je vous remercie! –

Questions connexes