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.