Det er ikke meningen, at du skal kunne få resultater fra executemany
:
Funktionen er mest nyttig til kommandoer, der opdaterer databasen:ethvert resultatsæt, der returneres af forespørgslen, kasseres.
Ifølge psycopg2-dokumenterne.
Du vil være bedre stillet at gå over en enkelt insert
inden for en transaktion eller ved at bruge en insert... returning
med flere værdier , selvom du i sidstnævnte tilfælde skal være omhyggelig med at matche returnerede ID'er ved hjælp af en anden inputværdi, kan du ikke bare antage, at rækkefølgen af returnerede ID'er er den samme som inputtet VALUES
liste.
Når jeg kører din test lokalt, fejler den simpelthen:
>>> 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
Testet med psycopg2 2.5.1.