我使用pyODBC连接到SQL Server 2005 express数据库。我在SQLServer express中创建了一个存储过程,该过程需要2个字符串参数,例如stored_proc(inpu1, input2),这些参数的类型为日期时间。我已经使用管理工作室测试了存储过程,它确实返回了适当的结果。然而,当我尝试从python调用存储过程时(我使用Eclipse),我得到了错误。
pyodbc。DataError: ('22018', '[22018] [Microsoft][SQL Native Client] cast specification (0) (SQLExecDirectW)')无效字符值
我调用的函数如下:
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。执行("{叫dbo.GetAlarmEventHistoryFrequency_TimeRange(? ?)}",(tstart),(往往))
应该特别注意特殊符号{}以及(tstart),(tend) local_cursor中参数传递的方式。执行(" * { *叫dbo.GetAlarmEventHistoryFrequency_TimeRange * (? ?) }", (tstart),(往往)* )