我在尝试使用exec proc语句执行bindparam时遇到以下错误。如果我将exec proc语句替换为select语句,则该命令可以工作。我是不是漏掉了什么?
sqlalchemy.exc.ProgrammingError: (ProgrammingError) ('42000', '[42000] [FreeTDS][SQL Server]The untyped variable ? is allowed only in in a WHERE clause or the SET clause of an UPDATE statement or the VALUES list of an INSERT statement\n (7332) (SQLPrepare)') 'exec TEST_proc @a=?, @b=?, @c=?, @d=?, @e=?, @f=?, @g=?, @h=?, @cptyAcronym=?, @i=?, @statusString=?' ('ABC', 'CBML', None, 'TI26615414X225', 'DEC', 'EFF', datetime.datetime(2012, 12, 3, 0, 0), datetime.datetime(2012, 12, 3, 0, 0), 'RAA', 'NYC', None)
这是我正在使用的命令
t = text('exec TEST_proc %s' % param_string, bindparams = [a, b, c, d, e, f, g, h, i, j, statusString])
resultProxy = engine.execute(t)
发布于 2014-03-07 01:58:12
Sybase的一些内部工作原理可以解释这不起作用的原因。
对于有预期的重复调用的任何语句准备(即,语句包含“?”占位符) Sybase实际上会将整个语句转换为存储过程。
当它创建“即时”存储过程时,它使用systables和syscolumn来查找每个位置参数上的声明所需的数据类型。当您尝试对存储过程执行此操作时,没有这样快速的查找(如果使用'?‘,则要求Sybase对您所调用的存储过程进行参数化的开销将失去速度优势。占位符)。
在任何情况下,都不能从临时存储过程调用存储过程。使用其他工具来生成所需的参数,并在每次都执行一次完整的准备/执行。
https://stackoverflow.com/questions/9591531
复制相似问题