You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server正常运行的查询在SQLAlchemy执行时无返回结果

SQLAlchemy调用SQL Server含sp_executesql的复杂查询失败(从文件读取时)

我有一段在SQL Server中可正常运行的复杂查询,但使用Python的SQLAlchemy调用时无法返回记录。简单SELECT查询可正常执行,说明数据库连接无问题,且已用text()包裹查询语句。我是SQLAlchemy新手,原以为SQL Server中可用的查询都能在SQLAlchemy中运行,已查阅大量资料但未找到有效方案。

报错信息

从.sql文件读取查询执行时,出现如下报错:

fetchall
    return self._allrows()
  File "C:\Program Files\Python310\lib\site-packages\sqlalchemy\engine\result.py", line 555, in _allrows
    make_row = self._row_getter
  File "C:\Program Files\Python310\lib\site-packages\sqlalchemy\util\langhelpers.py", line 1257, in __get__
    obj.__dict__[self.__name__] = result = self.fget(obj)
  File "C:\Program Files\Python310\lib\site-packages\sqlalchemy\engine\result.py", line 478, in _row_getter
    key_to_index = metadata._key_to_index
  File "C:\Program Files\Python310\lib\site-packages\sqlalchemy\engine\cursor.py", line 1363, in _key_to_index
    self._we_dont_return_rows()

可正常运行的查询

SELECT * FROM [dbo].[Customer_Orders_Daily]

执行失败的复杂查询(模拟实际结构)

该查询在SQL Server中可正常运行,但通过SQLAlchemy从文件读取执行时失败:

DECLARE @query NVARCHAR(MAX);

SET @query = 
'
SELECT * FROM [dbo].[Customer_Orders_Daily] 
'
EXEC sp_executesql @query;

Python代码片段

import sqlalchemy
from sqlalchemy import text
import pandas as pd

def runSQLScript(SQLScript_file):
    server_name='xxxx'
    database_name='yyy'

    connection_url = sqlalchemy.engine.URL.create(
        "mssql+pyodbc",
        database=database_name, 
        host=server_name, 
        query={'driver':'SQL Server'}
    )
    engine = sqlalchemy.create_engine(connection_url)

    try:
        with open(SQLScript_file, 'r') as file:
            sql_script = file.read()
        with engine.connect() as conn:
            # 读取结果到DataFrame
            result = conn.execute(text(sql_script))
            df = pd.DataFrame(result.fetchall(), columns=result.keys())
    except:
        print("Error running query")

    # 关闭连接
    conn.close()

更新情况

直接在Python代码中写入该复杂查询可正常运行,但从文件读取仍失败:

with engine.connect() as conn:
    # 尝试执行语句并提交
    try:
        sql_command="""
        DECLARE @query NVARCHAR(MAX);
        SET @query = 'SELECT * FROM [server].[dbo].[Customer_Orders_Daily]'
        EXEC sp_executesql @query;
        """
        result = conn.execute(text(sql_command))
        print(result.fetchall())
        exit()
    # 错误捕获
    except:
        print('Error executing Query')

内容的提问来源于stack exchange,提问作者PythonAutomation

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 05:29:58