在 pymssql 中使用 `query` 和 `callproc` 调用存储过程的区别

Posted

技术标签:

【中文标题】在 pymssql 中使用 `query` 和 `callproc` 调用存储过程的区别【英文标题】:Difference between calling stored procedure with `query` and `callproc` in pymssql 【发布时间】:2020-02-11 02:45:15 【问题描述】:

我在 SQL Server 上保存了一个存储过程,并使用 pymssql 连接到该数据库。

我可以通过成功调用cursor.query('EXEC FindPerson') 来调用这个过程。 但是我不能使用方法cursor.callproc('FindPerson', (name,)),我得到了这个错误

'NoneType' 和 'int' 的实例之间不支持'

我想知道为什么我不能调用callproc 方法。我想使用callproc 的原因是能够从过程中循环不同的结果集。

我也试过在这个方法上放不同的存储过程,不管我放什么参数,我总是得到同样的错误。所以似乎callproc 方法在执行程序之前就失败了。问题是调用存储过程的正确方法是什么?

下面是一个存储过程的例子。

CREATE PROCEDURE FindPerson
    @name VARCHAR(100)
AS 
BEGIN
    SELECT * 
    FROM persons 
    WHERE name = @name
END

【问题讨论】:

【参考方案1】:

您需要在元组中传递名称参数。 试试 cursor.callproc('FindPerson', (personname,))

【讨论】:

我在代码中添加了参数但忘记粘贴了。我遇到了同样的错误。

以上是关于在 pymssql 中使用 `query` 和 `callproc` 调用存储过程的区别的主要内容,如果未能解决你的问题,请参考以下文章

pymssql 问题 - INSERT 不适用于参数

使用 pymssql,如何使用输出调用存储过程

使用 pymssql 使用 Python 导入 .bak MySQL 数据库

如何为 pymssql 编写 pytest?

如何在未确定数量的参数上使用 LIKE 和 % 和 pymssql?

使用 SQL Alchemy 和 pymssql 指定故障转移伙伴