使用PyODBC将参数传递给存储过程
我正在使用pyODBC连接到SQL Server 2005 Express数据库。我在SQLServer express中创建了一个存储过程,该存储过程需要2个字符串参数,例如stored_proc(inpu1,input2),这些参数的类型为datetime。我已经使用管理工作室测试了存储过程,它确实返回了合适的结果。但是,当我尝试从Python(我使用Eclipse)调用存储过程时,我得到的错误。使用PyODBC将参数传递给存储过程
pyodbc.DataError: ('22018', '[22018] [Microsoft][SQL Native Client]Invalid character value for cast specification (0) (SQLExecDirectW)')2/9/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,但即使这不是成功了,虽然我可能会使用它错了
我终于得到它,没有崩溃
local_cursor.execute("{call dbo.GetAlarmEventHistoryFrequency_TimeRange(tstart,tend)}")
工作是错误的语法。它应该是
local_cursor.execute("{call dbo.GetAlarmEventHistoryFrequency_TimeRange(?,?)}",(tstart),(tend))
应特别注意对特殊符号{}和参数在(TSTART)传递的方式进行,(往往)local_cursor.execute(” * { *调用dbo.GetAlarmEventHistoryFrequency_TimeRange * (?,?)} “(TSTART),(往往)*)
感谢您的回答。按照上面的步骤,但我不断收到错误:“error_message”:“不是在字符串格式化过程中转换的所有参数” – Muniu
我已经打了一下,发现local_cursor.execute(” 叫dbo.GetAlarmEventHistoryFrequency_TimeRange(?,?) }“,[dt_start],[dt_end]) 基本上,语法似乎是”调用stored_proc(?),[ PARAMS。现在我认为是这样,但是当我运行时,我在Python.exe中得到了未处理的Win32异常。有没有人使用python 2.7在windows上使用pyodBC进行实验? – user595985