sql >> Databasteknik >  >> RDS >> PostgreSQL

få id för flera rader infogade i psycopg2

Det är inte meningen att du ska kunna få resultat från executemany :

Funktionen är mest användbar för kommandon som uppdaterar databasen:alla resultatuppsättningar som returneras av frågan kasseras.

Enligt psycopg2-dokumenten.

Det är bättre för dig att gå över en enda insert inom en transaktion, eller genom att använda en insert... returning med flera värden , även om du i det senare fallet måste vara noga med att matcha returnerade ID:n med ett annat inmatningsvärde, kan du inte bara anta att ordningen på returnerade ID:n är densamma som de inmatade VALUES lista.

När jag kör ditt test lokalt misslyckas det helt enkelt:

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

Testad med psycopg2 2.5.1.



  1. 6 sätt att sammanfoga en sträng och ett nummer i SQL Server

  2. BULK INSERT med identitet (auto-increment) kolumn

  3. Skillnader mellan MySql och MySqli i PHP

  4. Oracle dokumentation