web-dev-qa-db-fra.com

Comment obtenir l'id après INSERT dans la base de données MySQL avec Python?

J'exécute une instruction INSERT INTO

cursor.execute("INSERT INTO mytable(height) VALUES(%s)",(height))

et je veux obtenir la clé primaire.

Ma table a 2 colonnes:

id      primary, auto increment
height  this is the other column.

Comment puis-je obtenir le "id", après que je viens de l'insérer?

164
TIMEX

Utilisez cursor.lastrowid Pour obtenir le dernier identifiant de ligne inséré dans l'objet curseur ou connection.insert_id() pour obtenir l'identifiant du dernier insert de cette connexion.

216
Amber

Aussi, cursor.lastrowid (Une extension dbapi/PEP249 supportée par MySQLdb):

>>> import MySQLdb
>>> connection = MySQLdb.connect(user='root')
>>> cursor = connection.cursor()
>>> cursor.execute('INSERT INTO sometable VALUES (...)')
1L
>>> connection.insert_id()
3L
>>> cursor.lastrowid
3L
>>> cursor.execute('SELECT last_insert_id()')
1L
>>> cursor.fetchone()
(3L,)
>>> cursor.execute('select @@identity')
1L
>>> cursor.fetchone()
(3L,)

cursor.lastrowid Est un peu moins cher que connection.insert_id() et beaucoup moins cher qu'un autre aller-retour vers MySQL.

108
Andrew

Les spécifications DBAPI Python définissent également l'attribut 'lastrowid' pour l'objet curseur, donc ...

id = cursor.lastrowid

... devrait fonctionner aussi, et c'est évidemment connexion par connexion.

31
mkotechno
SELECT @@IDENTITY AS 'Identity';

ou

SELECT last_insert_id();
6
Keith