ultimo obtener last inserted insertado python sqlite sqlite3

python - obtener - sqlite get id of inserted row



¿Cómo recuperar el ID insertado después de insertar la fila en SQLite usando Python? (1)

¿Cómo recuperar el ID insertado después de insertar la fila en SQLite usando Python? Tengo una mesa como esta:

id INT AUTOINCREMENT PRIMARY KEY, username VARCHAR(50), password VARCHAR(50)

Inserto una nueva fila con el ejemplo data username="test" y password="test" . ¿Cómo recupero la identificación generada en una transacción segura? Esto es para una solución de sitio web, donde dos personas pueden estar insertando datos al mismo tiempo. Sé que puedo obtener la última fila de lectura, pero no creo que sea una transacción segura. ¿Alguien puede darme un consejo?


Puede usar cursor.lastrowid (consulte "Extensiones de la API DB opcional"):

connection=sqlite3.connect('':memory:'') cursor=connection.cursor() cursor.execute(''''''CREATE TABLE foo (id integer primary key autoincrement , username varchar(50), password varchar(50))'''''') cursor.execute(''INSERT INTO foo (username,password) VALUES (?,?)'', (''test'',''test'')) print(cursor.lastrowid) # 1

Si dos personas se están insertando al mismo tiempo, siempre que utilicen diferentes cursor s, cursor.lastrowid devolverá el id de la última fila que insertó el cursor :

cursor.execute(''INSERT INTO foo (username,password) VALUES (?,?)'', (''blah'',''blah'')) cursor2=connection.cursor() cursor2.execute(''INSERT INTO foo (username,password) VALUES (?,?)'', (''blah'',''blah'')) print(cursor2.lastrowid) # 3 print(cursor.lastrowid) # 2 cursor.execute(''INSERT INTO foo (id,username,password) VALUES (?,?,?)'', (100,''blah'',''blah'')) print(cursor.lastrowid) # 100

Tenga en cuenta que lastrowid devuelve None cuando inserta más de una fila a la vez con executemany :

cursor.executemany(''INSERT INTO foo (username,password) VALUES (?,?)'', ((''baz'',''bar''),(''bing'',''bop''))) print(cursor.lastrowid) # None