使用pymssql,如何使用输出

时间:2015-11-06 21:09:52

标签: python sql-server exec pymssql

  1. 此代码有效,但不确定如何获取输出?

    storedProcedure = "dbo.myproc"
    cursor = conn.cursor()
    query = """DECLARE @test_suite_dispatch_id int;
               exec {sp} @test_suite_id={id},
               @test_suite_dispatch_id = @test_suite_dispatch_id OUTPUT
            """.format( sp=storedProcedure, id=TestSuiteData['TestSuite_ID'])
    print( query )
    cursor.execute( query )
    cursor.close()
    
  2. 如何使用pymssql的callproc方法实现上述功能?

    此代码不起作用:

    out = None
    cursor.callproc(storedProcedure, 
                    (TestSuiteData['TestSuite_ID'], out))
    

    这也不起作用:

    cursor.callproc(storedProcedure, 
                    [(TestSuiteData['TestSuite_ID']), out])
    

    我也试过了:

    cursor.callproc(storedProcedure, 
                    [(TestSuiteData['TestSuite_ID']), pymssql.output(int)])
    

    cursor.callproc(storedProcedure, 
                    [(TestSuiteData['TestSuite_ID']), pymssql.output(long)])
    
  3. 你们有什么想法?

    来源:https://stackoverflow.com/a/192032/2965993

2 个答案:

答案 0 :(得分:2)

好的,我明白了。

根据您的输出结果,这是我所做的并且有效:

msg = cursor.callproc(store_proc, (file_name, '0x0a', pymssql.output(str)))
print(msg[2])

显然我的存储过程接受不同的值,但您可以使用它。

答案 1 :(得分:0)

首先,您必须导入pymssql.output

from pymssql import output

然后,创建一个新变量,该变量将作为输出参数传递给实际的存储过程(此时,您必须知道输出参数将具有哪种类型,如果不知道,请检查存储过程代码):

counter = output(int)

您现在要做的就是将其传递给callproc。在下一个示例中,我的存储过程称为sp_test,它需要4个参数(最后一个参数是输出参数):

new_value = self.cursor.callproc('sp_test', (5, 0, 0, counter))
return new_value[3]

sp_test的结果是一个数组,该数组具有4个传递给存储过程的参数,最后一个从中获取值:

[5, 0, 0, 1463]

由于数组索引从0开始,所以您将从存储过程中以new_value [3]形式返回的值。