@AndrewGrinev

Как подсчитать кол-во вставленных записей в БД?

Подскажите, как подсчитать кол-во вставленных записей в БД после выполнения следующего запроса:
cursor.executemany("""
                INSERT INTO users(user_id, name)
                VALUES (%(user_id)s, %(name)s)
                ON CONFLICT (user_id) DO UPDATE SET
                name=%(name)s;
            """, users)

Интересует получить значение, сколько мы вставили записей, а не обновили.
  • Вопрос задан
  • 447 просмотров
Пригласить эксперта
Ответы на вопрос 1
Melkij
@Melkij
PostgreSQL DBA
Мне неизвестны штатные средства для этого.

В качестве обходных фокусов можно поизвращаться вот так:
with 
data (new_user_id, new_name) as (values(%(user_id)s, %(name)s)),
wr as (
    INSERT INTO users(user_id, name)
                select new_user_id, new_name from data
                ON CONFLICT (user_id) DO NOTHING returning user_id
), upd as (
    update users set name = new_name from data where users.user_id = data.new_user_id and data.new_user_id not in (
    select user_id from wr
    )
)
select count(*) from wr;


Что работает согласно задаче из-за того, что do nothing не осуществляет insert и потому строка не появляется в returning.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
23 нояб. 2024, в 01:31
1000 руб./за проект
23 нояб. 2024, в 00:16
2000 руб./за проект
22 нояб. 2024, в 23:55
3000 руб./за проект