为了账号安全,请及时绑定邮箱和手机立即绑定

pyodbc 过程执行失败

pyodbc 过程执行失败

有只小跳蛙 2023-03-08 10:39:39
我在 SQL Server (SSMS Studio) 上有一个存储过程这是过程:CREATE PROCEDURE  [dbo].[SELECT_main_program] (     @name varchar(255))ASBEGIN    SELECT ed_programms.showing_name, ed_programms.scripts, ed_programms.styles, ed_programms.infos, ed_menu.*    FROM ed_programms    JOIN ed_menu    ON ed_menu.id_program = ed_programms.id AND ed_menu.hidden = 0    WHERE ed_programms.name = @name AND ed_programms.active = 1;END因此,如果我调用此过程,pyodbc 将返回正确的行。但是如果我调用这个过程就会出现错误。CREATE PROCEDURE  [dbo].[INSERT_ed_menu_program] (    @name varchar(255),    @showing_name varchar(255),    @infos varchar(255),    @scripts varchar(500),    @styles varchar(500))ASBEGIN    INSERT INTO ed_programms    (name, showing_name, infos, scripts, styles, active)    VALUES(@name, @showing_name, @infos, @scripts, @styles, 1)END这是我的 python 代码。# Create the procedure params.params = ", ".join(['?' for i, row in enumerate(list(call[1]))])variables = ", ".join([row for i, row in enumerate(list(call[1]))])sql = "EXEC {sp} {prms}".format(sp=call[0], prms=params)# Check if is an INSERT, UPDATE or DELETE.if call[0][0].upper() == "I" or call[0][0].upper() == "U" or call[0][0].upper() == "D":    return stmt.execute(sql, [variables]).commit()else:    return stmt.execute(sql, [variables]).fetchall()该变量call是一个列表,包含过程的名称和参数。所以问题是,如果我执行 select proc,为什么我的代码可以工作。但是如果我执行 insert proc 不工作?错误是INSERT_ed_menu_program The SQL contains 5 parameter markers but 1 parameters were supplied HY000更新 2:打印的 SQL 是sql = EXEC INSERT_ed_menu_program ?, ?, ?, ?, ?variables = my_program, Mein Test 01, test 01 desc, ,
查看完整描述

1 回答

?
慕虎7371278

TA贡献1802条经验 获得超4个赞

所以最后我有一个解决方案。

variables这是我的解决方案:我已经删除了MSSQL 中不支持的代码部分。我将列表直接交给variables执行语句。

像这样:

return stmt.execute(sql, call[1]).commit()


查看完整回答
反对 回复 2023-03-08
  • 1 回答
  • 0 关注
  • 114 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号