Как Вы получаете выходные параметры из хранимой процедуры в Python?

Я обнаружил, что эта проблема не связана с тем, когда запускается сама функция. Проблема заключается в том, что элементы DOM устанавливаются в мою переменную внутри функции, когда пользователь вводит в поле, а не когда функция вызывается на самом деле.

10
задан Gord Thompson 10 October 2016 в 23:45
поделиться

6 ответов

Я не эксперт по Python, но после краткого просматривания DB-API 2.0, я полагаю, что необходимо использовать "callproc" метод курсора как это:

cur.callproc('my_stored_proc', (first_param, second_param, an_out_param))

Затем у Вас будет результат в возвращенном значении (параметрический усилитель) в "an_out_param" переменной.

4
ответ дан 4 December 2019 в 01:58
поделиться

Если Вы не можете или не хотеть изменять исходную процедуру, и иметь доступ к базе данных можно записать простую процедуру обертки, которая является вызываемой из Python.

Например, если у Вас есть хранимая процедура как:

CREATE PROC GetNextNumber
   @NextNumber int OUTPUT
AS
...

Вы могли записать обертку как поэтому, которая является легко вызываемой из Python:

CREATE PROC GetNextNumberWrap
AS
    DECLARE @RNextNumber int
    EXEC GetNextNumber @RNextNumber
    SELECT @RNextNumber
GO

Затем Вы могли назвать его из Python как так:

import pymssql
con = pymssql.connect(...)
cur = con.cursor()
cur.execute("EXEC GetNextNumberWrap")
next_num = cur.fetchone()[0]
2
ответ дан 4 December 2019 в 01:58
поделиться

Если Вы заставляете свою процедуру произвести таблицу, можно использовать тот результат вместо параметрических усилителей.

Таким образом вместо:

CREATE PROCEDURE Foo (@Bar INT OUT, @Baz INT OUT) AS
BEGIN
   /* Stuff happens here */
   RETURN 0
END

сделать

CREATE PROCEDURE Foo (@Bar INT, @Baz INT) AS
BEGIN
   /* Stuff happens here */
   SELECT @Bar Bar, @Baz Baz
   RETURN 0
END
1
ответ дан 4 December 2019 в 01:58
поделиться

Похоже, что каждый Python dbapi библиотека, реализованная сверху freetds (pymssql, pyodbc, и т.д.), не сможет получить доступ к выходным параметрам при соединении с Microsoft SQL Server 7 SP3 и выше.

http://www.freetds.org/faq.html#ms.output.parameters

1
ответ дан 4 December 2019 в 01:58
поделиться

Вы могли бы также посмотреть на использование ВЫБОРА, а не ВЫПОЛНИТЬСЯ. ВЫПОЛНИТЕСЬ (iirc) в основном ВЫБОР, который ничего на самом деле не выбирает (просто заставляет побочные эффекты произойти).

0
ответ дан 4 December 2019 в 01:58
поделиться

Мне удалось получить выходное значение из Хранимая процедура SQL с использованием Python. Мне не удалось найти хорошую помощь в получении выходных значений в Python. Я сам разобрался с синтаксисом Python, поэтому подозреваю, что это стоит опубликовать здесь:

import sys, string, os, shutil, arcgisscripting
from win32com.client import Dispatch
from adoconstants import *

#skip ahead to the important stuff

conn = Dispatch('ADODB.Connection')
conn.ConnectionString = "Provider=sqloledb.1; Data Source=NT38; Integrated Security = SSPI;database=UtilityTicket"
conn.Open()

#Target Procedure Example: EXEC TicketNumExists @ticketNum = 8386998, @exists output

Cmd = Dispatch('ADODB.Command')
Cmd.ActiveConnection = conn

Cmd.CommandType = adCmdStoredProc
Cmd.CommandText = "TicketNumExists"

Param1 = Cmd.CreateParameter('@ticketNum', adInteger, adParamInput)
Param1.Value = str(TicketNumber)
Param2 = Cmd.CreateParameter('@exists', adInteger, adParamOutput)

Cmd.Parameters.Append(Param1)
Cmd.Parameters.Append(Param2)

Cmd.Execute()

Answer = Cmd.Parameters('@exists').Value
1
ответ дан 4 December 2019 в 01:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: