使用read_sql分块处理空结果

时间:2018-10-22 18:09:00

标签: python pandas dataframe

我仍在学习Python,我需要处理一个sql查询不提供任何行的情况,并使用带有chunksize参数的pandas read_sql函数。

这是当前行:

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 :(得分:0)

尝试一下:

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)