Neměli byste být schopni získat výsledky z executemany
:
Funkce je většinou užitečná pro příkazy, které aktualizují databázi:jakákoliv sada výsledků vrácená dotazem je zahozena.
Podle dokumentů psycopg2.
Budete lépe, když budete opakovat jeden insert
v rámci transakce nebo pomocí vícehodnotového insert... returning
, i když v druhém případě musíte být opatrní, abyste porovnali vrácená ID pomocí jiné vstupní hodnoty, nemůžete jen předpokládat, že pořadí vrácených ID je stejné jako vstupní VALUES
seznam.
Když spustím váš test lokálně, jednoduše selže:
>>> 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
Testováno pomocí psycopg2 2.5.1.