web-dev-qa-db-ja.com

PythonでMySQLデータベースにINSERTした後に「id」を取得するにはどうすればよいですか?

INSERT INTOステートメントを実行します

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

そして主キーを取得したいです。

私のテーブルには2つの列があります。

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

これを挿入した後、「id」を取得するにはどうすればよいですか?

164
TIMEX

cursor.lastrowidを使用してカーソルオブジェクトに挿入された最後の行IDを取得するか、connection.insert_id()を使用してその接続の最後の挿入からIDを取得します。

216
Amber

また、cursor.lastrowid(MySQLdbでサポートされるdbapi/PEP249拡張):

>>> 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.lastrowidconnection.insert_id()よりやや安く、MySQLへの別の往復よりもはるかに安いです。

108
Andrew

Python DBAPI仕様では、カーソルオブジェクトの「lastrowid」属性も定義されているため、...

id = cursor.lastrowid

...これも機能するはずです。また、明らかに接続ごとです。

31
mkotechno
SELECT @@IDENTITY AS 'Identity';

または

SELECT last_insert_id();
6
Keith