Как получить количество удаленных строк в PostgreSQL?

Начните с установки «id» в качестве индекса, если это еще не сделано.

df = df.set_index('id')

Одна опция для проверки каждой строки использует applymap, вызывая str.endswith:

df[df.applymap(lambda x: x.endswith('--')).all(1)]

   pattern1 pattern2 pattern3
id                           
2     a-a--    a-b--    a-c--
3     a-v--    a-m--    a-k--

Другая опция - apply, вызывая pd.Series.str.endswith для каждого столбца: [1115 ]

df[df.apply(lambda x: x.str.endswith('--')).all(1)]

   pattern1 pattern2 pattern3
id                           
2     a-a--    a-b--    a-c--
3     a-v--    a-m--    a-k--

И, наконец, для повышения производительности вы можете использовать маски И в пределах понимания списка, используя logical_and.reduce:

# m = np.logical_and.reduce([df[c].str.endswith('--') for c in df.columns])
m = np.logical_and.reduce([
    [x.endswith('--') for x in df[c]] for c in df.columns])
m
# array([False,  True,  True, False])

df[m]
   pattern1 pattern2 pattern3
id                           
2     a-a--    a-b--    a-c--
3     a-v--    a-m--    a-k--

Если есть другие столбцы, но вы хотите только чтобы рассмотреть те, которые названы "pattern *", вы можете использовать filter в DataFrame:

u = df.filter(like='pattern')

Теперь повторите описанные выше опции, используя u, например, первая опция будет

[ 115]

... и т. Д.

29
задан Daniel L. VanDenBosch 1 December 2018 в 00:11
поделиться

3 ответа

Запрос insert или replace вставит новую запись, если id = 1 еще не существует.

Запрос на обновление будет только uudate id = 1, если он уже существует, он не создаст новую запись, если он не существует.

-121--968370-

Я использую PIC, но рассмотрю Arduino, если выберу сегодня. Но из ваших целей:

  • как порты ввода-вывода работают
  • ограничения памяти/требования
  • прерывать процедуры обслуживания

Интересно, лучше ли вам просто взломать ядро Linux?

-121--1286061-

Вам нужна функция PQcmdTuples из libpq . Который в PHP, например, переносится как pg _ affected _ rows .

-3
ответ дан 28 November 2019 в 00:57
поделиться

Вы можете использовать предложение RETURNING:

DELETE FROM table WHERE condition IS TRUE RETURNING *;

После этого вам просто нужно проверить количество возвращаемых строк. Вы можете оптимизировать его с помощью CTE :

WITH deleted AS (DELETE FROM table WHERE condition IS TRUE RETURNING *) SELECT count(*) FROM deleted;

. Это должно вернуть только количество удаленных строк.

62
ответ дан Zakaria 28 November 2019 в 00:57
поделиться

Это должно быть просто на Java.

Statement stmt = connection.createStatement();
int rowsAffected = stmt.executeUpdate("delete from your_table");
System.out.println("deleted: " + rowsAffected);

См. java.sql.Statement .

11
ответ дан 28 November 2019 в 00:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: