Обрабатывать пустой результат с помощью read_sql chunked - PullRequest
0 голосов
/ 22 октября 2018

Я все еще изучаю Python, мне нужно обработать случай, когда SQL-запрос не предоставляет никаких строк, с функцией pandas read_sql с параметром chunksize.

Вот текущая строка:

df = pd.concat([x for x in pd.read_sql(SQL_request,self.connection, chunksize=50000)], ignore_index=True)

Когда запрос возвращает ноль строк, я получаю эту ошибку:

  File "[....]\lib\site-packages\pandas\core\reshape\concat.py", line 239, in __init__
    raise ValueError('No objects to concatenate')
ValueError: No objects to concatenate

Каков наилучший способ справиться с этим?Мне нужно вернуть пустой фрейм данных, даже если нет строк (столбцы должны быть там).Мне нужно сохранить порцию, это действительно помогает не использовать слишком много памяти.

Я подумал о том, чтобы выполнить первый запрос без разбивки на части и проверить, есть ли какие-либо строки, а затем выполнить второй разбитый на части запрос.Но я чувствую, что это очень плохая и неэффективная идея.

1 Ответ

0 голосов
/ 23 октября 2018

Попробуйте это:

df = pd.concat([x for x in pd.read_sql(SQL_request,self.connection, chunksize=50000) if not x.empty] , ignore_index=True)

РЕДАКТИРОВАТЬ:

Ах, понял.Можете ли вы попробовать следующий код тогда?Я обновлю ответ, если он будет работать.

try: 
    df = pd.concat([x for x in pd.read_sql(SQL_request,self.connection, chunksize=50000)] , ignore_index=True)
except:
    df = pd.read_sql(SQL_request,self.connection)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...