sql >> Base de Datos >  >> RDS >> PostgreSQL

obtener ID de varias filas insertadas en psycopg2

Se supone que no puedes obtener resultados de executemany :

La función es principalmente útil para los comandos que actualizan la base de datos:cualquier conjunto de resultados devuelto por la consulta se descarta.

Según los documentos de psycopg2.

Será mejor que recorra un solo insert dentro de una transacción, o usando un valor múltiple insert... returning , aunque en el último caso debe tener cuidado de hacer coincidir los ID devueltos con otro valor de entrada, no puede simplemente asumir que el orden de los ID devueltos es el mismo que el de entrada VALUES lista.

Cuando ejecuto su prueba localmente, simplemente falla:

>>> import psycopg2
>>> conn = psycopg2.connect("dbname=regress")
>>> curs = conn.cursor()
>>> curs.execute("create table my_table(id serial primary key, field_1 integer, field_2 integer);")
>>> data = [(0, 0), (0, 0)]
>>> curs.executemany(
...     "INSERT INTO my_table (field_1, field_2) "
...     "VALUES (%s, %s) RETURNING id;",
...     data
... )
>>> 
>>> curs.fetchall()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
psycopg2.ProgrammingError: no results to fetch

Probado con psycopg2 2.5.1.