PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

obtenir les identifiants de plusieurs lignes insérées dans psycopg2

Vous n'êtes pas censé pouvoir obtenir des résultats de executemany :

La fonction est surtout utile pour les commandes qui mettent à jour la base de données :tout jeu de résultats renvoyé par la requête est ignoré.

Selon la documentation psycopg2.

Vous feriez mieux de boucler sur un seul insert dans une transaction, ou en utilisant un insert... returning à valeurs multiples , bien que dans ce dernier cas, vous devez faire attention à faire correspondre les ID renvoyés à l'aide d'une autre valeur d'entrée, vous ne pouvez pas simplement supposer que l'ordre des ID renvoyés est le même que l'entrée VALUES liste.

Lorsque j'exécute votre test localement, il échoue tout simplement :

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

Testé avec psycopg2 2.5.1.