PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

ottenere gli ID di più righe inserite in psycopg2

Non dovresti essere in grado di ottenere risultati da executemany :

La funzione è utile principalmente per i comandi che aggiornano il database:qualsiasi set di risultati restituito dalla query viene scartato.

Secondo i documenti di psycopg2.

Faresti meglio a scorrere un singolo insert all'interno di una transazione o utilizzando un insert... returning multivalore , sebbene in quest'ultimo caso devi fare attenzione a far corrispondere gli ID restituiti utilizzando un altro valore di input, non puoi semplicemente presumere che l'ordine degli ID restituiti sia lo stesso dell'input VALUES elenco.

Quando eseguo il test in locale, semplicemente fallisce:

>>> 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

Testato con psycopg2 2.5.1.