使用两个参数从Python调用SQL Server中的存储过程

问题描述 投票:0回答:1

所以我目前正在尝试将sql server中的存储过程连接到python程序。我可以很好地连接到服务器并且可以抓取表,但是当我尝试运行存储过程时,我收到“此结果不返回行”错误。这是我用来调用存储过程的代码:

import pyodbc
import sqlalchemy as sal

engine = sal.create_engine('mssql+pyodbc://{}:{}@{}/{}?driver={}'.format(username,password,server,database,driver_2))


previous_days_start_value = 1
previous_days_end_value = 10
sql_query = sal.text("EXEC clk.get_codes_pdf :previous_days_start, :previous_days_end")


pdf_df = pd.read_sql_query(sql_query, engine, params={"previous_days_start":previous_days_start_value, "previous_days_end":previous_days_end_value})

这基本上是我调用的存储过程:

ALTER PROCEDURE [gen].[get_codes] 
@previous_days_start bigint, @previous_days_end bigint
AS
BEGIN TRY
SET NOCOUNT ON;
select * from #Table;
END Try

当我在 sql 中执行此操作时,我确实得到了一个表。我可以这样执行:

exec gen.get_codes 30,10

表格打印完美。

任何帮助将不胜感激

我想从我的存储过程返回临时表。我已经使用以下方法测试了存储过程:

exec gen.get_codes 30,10

我确实得到一张桌子作为回报。我也尝试添加

SET NOCOUNT ON;

但我还是没能退回桌子。似乎建立了连接,但没有表返回到我的数据框中

python python-3.x sql-server sqlalchemy pyodbc
1个回答
0
投票

Pandas read_sql_query 用于将 SQL 结果集读取到 Pandas DataFrame 中。

您收到的错误表明您的存储过程无意返回结果集。直接使用 SqlAlchemy 引擎(代码示例中的

engine
变量)会更合适。

根据评论,您还应该检查您正在测试的存储过程与代码尝试运行的存储过程是否相同。

© www.soinside.com 2019 - 2024. All rights reserved.