Estoy usando Python y psycopg2 para interactuar con postgres.
Cuando inserto una fila ...
sql_string = "INSERT INTO hundred (name,name_slug,status) VALUES ("
sql_string += hundred_name + ", '" + hundred_slug + "', " + status + ");"
cursor.execute(sql_string)
... ¿cómo obtengo el ID de la fila que acabo de insertar? Molesto:
hundred = cursor.fetchall()
devuelve un error, mientras usa 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)
simplemente regresa None.
ACTUALIZACIÓN: También lo hace currval(aunque usar este comando directamente en postgres funciona):
sql_string = "SELECT currval(pg_get_serial_sequence('hundred', 'id'));"
hundred_id = cursor.execute(sql_string)
¿Alguien puede aconsejarme?
¡Gracias!
python
postgresql
psycopg2
AP257
fuente
fuente

iddeRETURNING iddebe ser el nombre del campo del campo de número de serie / primaria.RETURNING idal final de laINSERTconsulta lo solucionó.Terminé aquí porque tuve un problema similar, pero estamos usando Postgres-XC, que aún no admite la cláusula RETURNING ID. En ese caso, puede utilizar:
cursor.execute ('INSERT INTO ........') cursor.execute ('SELECCIONAR LASTVAL ()') lastid = cursor.fetchone () ['lastval']¡Por si acaso le fuera útil a alguien!
fuente
Considere una cláusula de DEVOLUCIÓN http://www.postgresql.org/docs/8.3/static/sql-insert.html
fuente