Как получить id созданных записей
Есть таблица postgresql payments_approval_history
В таблицу вносятся сразу несколько записей, необходимо получить id этих записей без доп запроса чтобы не увеличивать впустую счетчик id. Сейчас я умею такое реализовывать только с использованием цикла (пробегаемся по каждой записи и вносим отдельно:
query_a_h = """
INSERT INTO payments_approval_history (
payment_id,
status_id,
user_id,
approval_sum
)
VALUES (%s, %s, %s, %s)
RETURNING payment_id, confirm_id;"""
values_p_a_h = [
(26, 2, 2, 2),
(27, 2, 2, 3),
(80, 2, 2, 4)
]
tmp = []
for i in range(len(values_p_a_h)):
cursor.execute(query_a_h,
[
values_p_a_h[i][0],
values_p_a_h[i][1],
values_p_a_h[i][2],
values_p_a_h[i][3]
])
results = cursor.fetchall()
tmp.append(results)
conn.commit()
cursor.close()
conn.close()
print(tmp)
В интернетах я нашёл executemany
, но он не может возвращать ничего psycopg2.ProgrammingError: no results to fetch
и ничего не записывает, пока из запроса не удалишь RETURNING payment_id, confirm_id
В документации psycopg2
говорится, что лучше использовать execute_batch
, но на выходе я получаю только последнее значение из всего списка.
Мой вопрос: Какая практика лучшая в случае, когда необходимо внести строк 10-30 и получить их id обратно?