Как удалить только строки в Postgres, но не удалить таблицу с помощью метода pandas read_sql_query? - PullRequest
1 голос
/ 23 октября 2019

Я хотел выполнить операцию, в которой я хотел бы удалить все строки (но не удалить таблицу) в postgres и обновить в ней новые строки. И я хотел использовать pd.read_sql_query() метод из панд:

qry = 'delete from "table_name"'
pd.read_sql_query(qry, conection, **kwargs)

Но это выдает ошибку 'ResourceClosedError: This result object does not return rows. It has been closed automatically.'

Я могу ожидать этого, потому что метод должен возвращать пустой dataframe. Но этоне возвращал ни одного пустого кадра данных, а только указанную выше ошибку. Не могли бы вы помочь мне в ее решении ??

1 Ответ

1 голос
/ 23 октября 2019

Я использую MySql, но логика та же:

Запрос 1: Выберите все идентификаторы из таблицы

Quear 2: Удалите все эти идентификаторы

Какрезультат у вас есть:

Delete FROM table_name WHERE id IN (Select id FROM table_name)

Строка не возвращает анутинг, она просто удаляет все строки со специальным идентификатором. Я рекомендую выполнять команду только с помощью psycopg - без панд.

Затем вам понадобится еще один запрос, чтобы получить что-то от db, например:

pd.read_sql_query("SELECT * FROM table_name", conection, **kwargs)

Возможно (я делаюне используйте панды для чтения из БД) в этом случае вы получите пустой фрейм данных с именами столбцов

Возможно, вы можете объединить все действия следующим образом:

pd.read_sql_query('''Delete FROM table_name WHERE id IN (Select id FROM table_name); SELECT * FROM table_name''', conection, **kwargs)

Пожалуйста, попробуйте поделиться своими результатами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...