回答:
使用cursor.lastrowid
カーソルオブジェクトに挿入された最後の行のIDを取得するために、またはconnection.insert_id()
その接続上の最後のインサートからIDを取得します。
insert_id
返されますか?
lastrowid
現在のトランザクションがコミットされた後にのみ利用可能?
また、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.lastrowid
connection.insert_id()
MySQLへの別の往復よりもやや安く、はるかに安いです。
cursor.lastrowid
より安いのですconnection.insert_id()
か?
cursor.lastrowid
異なる何かが返されるという問題が発生しましたconnection.insert_id()
。cursor.lastrowid
最後の挿入IDをconnection.insert_id()
返しました0
。それはどうしてですか?
SELECT @@IDENTITY AS 'Identity';
または
SELECT last_insert_id();
select last_insert_id()
Linuxマシン上でCLIからの
これはPythonでのPyMySqlの単なる要件である可能性がありますが、IDが必要な正確なテーブルに名前を付ける必要があることがわかりました。
に:
cnx = pymysql.connect(host='host',
database='db',
user='user',
password='pass')
cursor = cnx.cursor()
update_batch = """insert into batch set type = "%s" , records = %i, started = NOW(); """
second_query = (update_batch % ( "Batch 1", 22 ))
cursor.execute(second_query)
cnx.commit()
batch_id = cursor.execute('select last_insert_id() from batch')
cursor.close()
batch_id
Out:5
...または実際の正しいBatch_ID値