Как я могу получить "идентификатор" после INSERT в базу данных MySQL с Python? - PullRequest
162 голосов
/ 31 марта 2010

Я выполняю инструкцию INSERT INTO

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

и я хочу получить первичный ключ.

В моей таблице 2 столбца:

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

Как я могу получить "id" после того, как я только что вставил это?

Ответы [ 4 ]

213 голосов
/ 31 марта 2010

Используйте cursor.lastrowid для получения последнего идентификатора строки, вставленного в объект курсора, или connection.insert_id() для получения идентификатора из последней вставки этого соединения.

107 голосов
/ 24 сентября 2010

Также cursor.lastrowid (расширение dbapi / PEP249, поддерживаемое 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 несколько дешевле, чем connection.insert_id(), и намного дешевле, чем очередное путешествие в MySQL.

31 голосов
/ 03 января 2011

Спецификация Python DBAPI также определяет атрибут 'lastrowid' для объекта курсора, поэтому ...

id = cursor.lastrowid

... тоже должно работать, и это, очевидно, для каждого соединения.

6 голосов
/ 31 марта 2010
SELECT @@IDENTITY AS 'Identity';

или

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