Используя 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. Как мне заставить вышеперечисленное работать, используя метод callproc pymssql?

    Этот код не работает:

    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)])
    

Ребята, что вы думаете?

Источник: https://stackoverflow.com/a/192032/2965993


person SomeGuyOnAComputer    schedule 06.11.2015    source источник
comment
Я пытаюсь понять то же самое... Я застрял на этом: " rel="nofollow noreferrer">github.com/pymssql/pymssql/blob/   -  person double_j    schedule 18.11.2015


Ответы (2)


Хорошо, я понял это.

В зависимости от того, каким будет ваш вывод, вот что я сделал, и это работает:

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

Очевидно, мой хранимый процесс принимает разные значения, но вы можете работать с ним.

person double_j    schedule 18.11.2015

Прежде всего, вам нужно импортировать 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].

person Miguel Rentes    schedule 30.11.2020