SQLite. Comment obtenir la valeur de clé primaire Incrémentation automatique après insertion, autre que last_insert_rowid ()?
Question
J'utilise Sqlite3 avec Flask microframework, mais cette question concerne uniquement le côté Sqlite des choses ..
Voici un extrait du code:
g.db.execute('INSERT INTO downloads (name, owner, mimetype) VALUES (?, ?, ?)', [name, owner, mimetype])
file_entry = query_db('SELECT last_insert_rowid()')
g.db.commit()
Le tableau de downloads
a une autre colonne avec les attributs suivants: id integer primary key autoincrement,
Si deux personnes écrivent en même temps le code ci-dessus pourrait produire des erreurs.
Les transactions peuvent être salissant. SQLite est-il construit de manière propre de retourner la clé primaire générée après avoir fait un INSERT?
La solution
La façon dont vous le faites est valide. Il n'y aura pas un problème si le Snipped ci-dessus est exécuté simultanément par deux scripts. last_insert_rowid()
retourne le numéro de ligne de la dernière instruction INSERT pour la connexion qu'il appelle. Vous pouvez également obtenir le rowid en faisant g.db.lastrowid
.