大熊猫

时间:2021-07-21 16:36:28

标签: sql-server python-3.x pandas

我有以下代码将每个块大小附加到主 Excel 文件中。

df = pd.read_sql(query,cnxn,chunksize=10000)
for chunk in df:
    chunk.to_excel(r'C:\File\Path\file.xlsx', mode='a', sep=',',encoding='utf-8')

我遇到的问题是,我预计会有大约 800 万行的结果。由于 excel 的行数限制约为 100 万行,我正在考虑两种选择:

  1. 对于每 100 万行,添加一个新工作表并继续该过程。这是首选方法。
  2. 为每组 100 万个结果创建一个新工作簿

对于哪种方法最好有任何建议吗?我知道我需要修改代码的 mode='a' 部分。

这是我收到的错误消息:

ProgrammingError: ('42000', '[42000] [Microsoft][ODBC SQL Server Driver][SQL Server]查询处理器耗尽内部资源,无法生成查询计划。这是一个罕见的事件,只有适用于极其复杂的查询或引用大量表或分区的查询。请简化查询。如果您认为自己错误地收到了此消息,请联系客户支持服务以获取更多信息。(8623) (SQLExecDirectW)')

提前致谢

编辑:一些进一步的说明

SQL 查询使用一个包含 200,000 个字符串的列表作为我的键并提取包含至少一个字符串的所有行。有多行具有相同的字符串标识符,这就是为什么我期望结果约为 800 万。这也是为什么我认为我遇到了编程错误。

1 个答案:

答案 0 :(得分:1)

<块引用>

查询处理器耗尽了内部资源,无法生成查询计划。 SQL 查询使用了 200,000 个字符串的列表

为了简化查询,请在 JSON 文档中传递 200,000 个字符串,并像 this answer 一样在服务器上解析它们,或者将它们加载到临时表中并在您的查询中引用该表。

将它们嵌入到查询文本中是一个坏主意