在 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` 调用存储过程的区别的主要内容,如果未能解决你的问题,请参考以下文章

需要将 SQL Query 转换为 Gorm 查询

如何从 Spark 结构化流中的 Cassandra 等外部存储读取 Kafka 和查询?

Kafka的使用和错误解决

Kafka 使用Java实现数据的生产和消费demo

kafka在Maven项目中的使用

如何在kafka-python和confluent-kafka之间做出选择