Najpierw wyodrębnij ids
na listę krotek:
ids = list((item['id'],) for item in data['issues'])
# example ids: [('41508',), ('41509',)]
Następnie użyj funkcji extras.execute_values():
from psycopg2 import extras
query = """
INSERT into Countries (revenue)
VALUES %s;
"""
extras.execute_values(cursor, query, ids)
Drugi argument funkcji executemany(query, vars_list)
powinna być sekwencją, podczas gdy data
jest obiektem, do którego elementów nie można uzyskać dostępu za pomocą indeksów całkowitych.
Ze względu na wydajność pierwsza funkcja wykonuje jedno zapytanie z wieloma argumentami, podczas gdy druga wykonuje tyle zapytań, ile argumentów.
Zauważ, że domyślnie trzeci argument execute_values()
to lista krotek, więc wyodrębniliśmy ids
właśnie w ten sposób.
Jeśli musisz wstawić wartości do więcej niż jednej kolumny, każda krotka na liście powinna zawierać wszystkie wartości dla jednego wstawionego wiersza, na przykład:
values = list((item['id'], item['key']) for item in data['issues'])
query = """
INSERT into Countries (id, revenue)
VALUES %s;
"""
extras.execute_values(cur, query, values)