gpt4 book ai didi

python - sqlalchemy:bindparam 和 exec proc 在文本中不起作用

转载 作者:太空宇宙 更新时间:2023-11-04 06:24:12 25 4
gpt4 key购买 nike

尝试使用 exec proc 语句绑定(bind)参数时出现以下错误。如果我用 select 语句替换 exec proc 语句,则该命令有效。我在这里遗漏了什么吗?

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)

最佳答案

Sybase 的一些内部工作原理可以解释为什么这行不通。

对于任何预期重复调用的语句准备(即语句包含“?”占位符),Sybase 实际上会将整个语句转换为存储过程。

当它创建“即时”存储过程时,它使用 systables 和 syscolumns 来查找每个位置参数上 DECLARE 所需的数据类型。当您尝试针对存储过程执行此操作时,没有这样快速的查找(要求 Sybase 参数化您正在调用的存储过程的开销会破坏使用“?”占位符的速度优势 [如果有的话])。

无论如何,您不能从临时存储过程中调用存储过程。使用其他东西来生成您想要的参数,并且每次都进行完整的准备/执行。

关于python - sqlalchemy:bindparam 和 exec proc 在文本中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9591531/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com