Возникли проблемы с вызовом хранимой процедуры в SQL Server из Python pyodbc

#sql-server #python-3.x #stored-procedures #pyodbc

Вопрос:

Это распространенный вопрос, если похоже, и я получил несколько хороших подсказок из других вопросов, но я все еще не добился успеха.

У меня есть сложная хранимая процедура в SQL Server, которая выполняет множество действий для заполнения таблицы. Он не принимает никаких параметров и не возвращает никаких полей. После того, как я вызову SP, я затем запрошу таблицу-мне нужно много данных, чтобы делать это пакетами, что отлично работает. Вызов SP из Python оказывается самой сложной частью.

 def executeSP():
    cnxn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};SERVER='  
            server ';DATABASE=' database ';UID=' username ';PWD='   password)
    cnxn.autocommit = True
    cursor = cnxn.cursor()
    cursor.execute("SET NOCOUNT ON; exec [schema].[SPName]")   
    cursor.close()
    del cursor
    cnxn.close()
 

Я установил NOCOUNT в значение on, чтобы python дождался завершения SP, прежде чем вернуться. Но когда я запускаю это, SP не вызывается. Те же параметры подключения работают для запроса таблицы в той же схеме. Ошибок не возникает.

У меня заканчиваются идеи.

Ответ №1:

Установки NOCOUNT на не всегда достаточно. Чтобы быть уверенным, повторяйте цикл до тех пор, пока pyodbc не решит, что наборов результатов больше нет, или вы можете отменить выполнение до его завершения. например

 cursor.execute(sql)
while cursor.nextset():
    pass 
cursor.close()