Передача параметров в хранимые процедуры с использованием PyODBC - PullRequest
2 голосов
/ 19 октября 2011

Я использую pyODBC для подключения к экспресс-базе данных SQL Server 2005. Я создал хранимую процедуру в SQLServer Express, которая принимает 2 строковых параметра, например сохраненный_процесс (inpu1, input2), эти параметры имеют тип datetime. Я проверил сохраненный процесс с помощью Management Studio, и он возвращает соответствующий результат. Однако, когда я пытаюсь вызвать хранимую процедуру из Python (я использую Eclipse), я получаю ошибку.

pyodbc.DataError: ('22018', '[22018] [Microsoft] [собственный клиент SQL] Недопустимое значение символа для спецификации приведения (0) (SQLExecDirectW)') 09.02.2011 12:00:03 2 / 9/2011 12: 20: 03

Функция, которую я вызываю, выглядит следующим образом:

def GetAlarmFrequencyTime(tstart,tend): 

print tstart, tend  
arguments=(tstart,tend)
local_cursor=conn.cursor()
local_cursor.execute("{call dbo.GetAlarmEventHistoryFrequency_TimeRange(tstart,tend)}")

resultset_rows=local_cursor.fetchall()
print "There are" , len(resultset_rows), "records"
for single_row in resultset_rows:
    print "|" ,single_row[0], "|" ,single_row[1],"|" 

local_cursor.close()

Строка, вызывающая проблему,

local_cursor.execute("{call dbo.GetAlarmEventHistoryFrequency_TimeRange(tstart,tend)}") 

Может ли кто-нибудь помочь мне понять, как я могу передать несколько параметров хранимой процедуре, вызываемой с использованием pyODBC. Нужно ли конвертировать tstart, и в первую очередь стремиться к формату даты и времени, если да, то как? Я истолковал strptime, но даже это не удалось, хотя я могу использовать его неправильно

1 Ответ

4 голосов
/ 20 октября 2011

Я наконец получил его, чтобы работать без сбоев

local_cursor.execute ("{call dbo.GetAlarmEventHistoryFrequency_TimeRange (tstart, tend)}")

неверный синтаксис. Должно быть

local_cursor.execute ("{call dbo.GetAlarmEventHistoryFrequency_TimeRange (?,?)}", (Tstart), (тендер))

Особое внимание следует уделить специальным символам {} и способу передачи параметров в (tstart), (тенденцию) local_cursor.execute ("* {* вызов dbo.GetAlarmEventHistoryFrequency_TimeRange * (?,?) }», (TSTART), (как правило) *)

...