Python / postgres / psycopg2: ottiene l'ID della riga appena inserita


Answers

Sono finito qui perché avevo un problema simile, ma stiamo usando Postgres-XC, che non supporta ancora la clausola RETURNING ID. In quel caso puoi usare:

cursor.execute('INSERT INTO ........')
cursor.execute('SELECT LASTVAL()')
lastid = cursor.fetchone()['lastval']

Nel caso fosse utile per chiunque!

Question

Sto usando Python e psycopg2 per interfacciare con Postgres.

Quando inserisco una riga ...

sql_string = "INSERT INTO hundred (name,name_slug,status) VALUES ("
sql_string += hundred_name + ", '" + hundred_slug + "', " + status + ");"
cursor.execute(sql_string)

... come posso ottenere l'ID della riga che ho appena inserito? Provando:

hundred = cursor.fetchall() 

restituisce un errore, mentre si utilizza l' RETURNING id :

sql_string = "INSERT INTO domes_hundred (name,name_slug,status) VALUES ("
sql_string += hundred_name + ", '" + hundred_slug + "', " + status + ") RETURNING id;"
hundred = cursor.execute(sql_string)

restituisce semplicemente None .

AGGIORNAMENTO: così fa currval (anche se si utilizza questo comando direttamente in postgres funziona):

sql_string = "SELECT currval(pg_get_serial_sequence('hundred', 'id'));"
hundred_id = cursor.execute(sql_string)

Qualcuno può consigliare?

Grazie!




Links