sql >> Databáze >  >> RDS >> PostgreSQL

získání ID více řádků vložených do psycopg2

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.



  1. Použití Pythonu a MySQL v procesu ETL

  2. PostgreSQL, komplexní dotaz pro výpočet přísad podle receptury

  3. Kde získám zdroj libpq?

  4. Jak mohu vybrat ze seznamu hodnot v SQL Server