3

我正在使用 pyODBC 连接到 SQL Server 2005 express 数据库。我在 SQLServer express 中创建了一个存储过程,它采用 2 个字符串参数,例如,stored_proc(inpu1, input2) 这些参数的类型是日期时间。我已经使用管理工作室测试了存储过程,它确实返回了适当的结果。但是,当我尝试从 python 调用存储过程(我正在使用 Eclipse)时,我得到了错误。

pyodbc.DataError: ('22018', '[22018] [Microsoft][SQL Native Client]强制转换规范 (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,但即使这样也没有成功,尽管我可能用错了

4

1 回答 1

4

我终于明白了,可以正常工作而不会崩溃

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

是错误的语法。它应该是

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

需要特别注意特殊符号 {} 和传入参数的方式 (tstart),(tend) local_cursor.execute(" *{ *call dbo.GetAlarmEventHistoryFrequency_TimeRange* (?,?)}",(tstart),(tend)* )

于 2011-10-20T14:19:26.537 回答