[python] 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”를 어떻게 얻습니까?



답변

사용 cursor.lastrowid커서 오브젝트에 삽입 된 마지막 행의 ID를 얻기 위해, 또는 connection.insert_id()해당 연결의 마지막 삽입에서 ID를 얻을 수 있습니다.


답변

또한 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에 대한 다른 왕복 보다 다소 저렴 하고 훨씬 저렴합니다.


답변

파이썬 DBAPI 사양은 커서 객체에 대한 ‘lastrowid’속성을 정의하므로 …

id = cursor.lastrowid

… 작동해야하며 분명히 연결 기반입니다.


답변

SELECT @@IDENTITY AS 'Identity';

또는

SELECT last_insert_id();


답변

이것은 파이썬에서 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 값이 실제로 무엇이든


답변