如何用SQLAlchemy执行含临时表的SQL查询并导出为Pandas DataFrame?
如何执行包含临时表的SQL Server查询并将结果存入Pandas DataFrame?
问题原因
你遇到的ResourceClosedError是因为SQL Server执行DROP TABLE和SELECT INTO语句时,会返回“影响行数”的状态消息,这些消息会被当作独立的结果集返回给客户端。pandas.read_sql会尝试读取第一个结果集,而这个结果集没有数据行,因此触发错误。
解决方案
最直接的修复方法是在SQL脚本开头添加SET NOCOUNT ON;,关闭这些计数消息,确保只有最后一个SELECT语句的结果集被返回:
修改后的SQL脚本:
SET NOCOUNT ON; DROP TABLE IF EXISTS #temp SELECT TOP 100 NAME INTO #temp FROM DB_CLI SELECT * FROM #temp
补充说明
SET NOCOUNT ON会抑制SQL Server返回每个语句影响的行数信息,避免这些空结果集干扰pandas对有效数据结果的读取。- 临时表是会话级的,你的代码中使用
engine.begin()的上下文管理器确保了所有SQL语句在同一个数据库连接会话中执行,因此后续查询可以访问到创建的临时表,这部分逻辑是正确的。 - 检查连接字符串中的服务器名称是否正确,比如如果是命名实例,需要写成
SERVER=SERVER\\INSTANCE(注意Python中反斜杠需要转义)。
内容的提问来源于stack exchange,提问作者Lampropeltis
相关产品推荐
相关产品推荐

