PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Abrufen von IDs mehrerer Zeilen, die in psycopg2 eingefügt wurden

Sie sollten keine Ergebnisse von executemany erhalten können :

Die Funktion ist vor allem für Befehle nützlich, die die Datenbank aktualisieren:Alle von der Abfrage zurückgegebenen Ergebnismengen werden verworfen.

Gemäß der psycopg2-Dokumentation.

Es ist besser, eine einzelne insert-Schleife zu durchlaufen innerhalb einer Transaktion oder mit einem mehrwertigen insert... returning , obwohl Sie im letzteren Fall darauf achten müssen, die zurückgegebenen IDs mit einem anderen Eingabewert abzugleichen, können Sie nicht einfach davon ausgehen, dass die Reihenfolge der zurückgegebenen IDs dieselbe ist wie die Eingabe VALUES Liste.

Wenn ich Ihren Test lokal ausführe, schlägt er einfach fehl:

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

Getestet mit psycopg2 2.5.1.