您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

为什么将参数化后查询会中断?

为什么将参数化后查询会中断?

sqlAlchemy使用您的非参数化查询select_adhoc生成sql脚本:

SELECT * FROM products
JOIN sales ON products.idn = sales.pid
AND sales.type = 'number'
WHERE products.idn in (1);

但是使用参数化查询select_parametrized),它会生成以下内容:(我从sql Server Profiler中进行了检查。)

declare @p1 int
set @p1=NULL
exec sp_prepexec @p1 output,N'@P1 nvarchar(12),@P2 int',N'
SELECT * FROM products
INNER JOIN sales ON products.idn = sales.pid 
    AND sales.type = @P1
WHERE products.idn in (@P2);
',N'number',1
select @p1

如果您在sql Server上尝试此操作,则会得到相同的异常:

消息8114,级别16,状态5,第32行将数据类型varchar转换为数值时出错。

问题出在@P1参数声明上-它隐式转换为varchar(的类型sales.type),从而导致此问题。可能是Python 2生成了varchar?

如果您像这样更改查询,它将可以正常工作;或您需要将的类型更改sales.typenvarchar

select_parametrized = """
SELECT * FROM products
INNER JOIN sales ON products.idn = sales.pid 
    AND sales.type = CAST(? AS VARCHAR(50))
WHERE products.idn in (?);
"""
其他 2022/1/1 18:35:04 有460人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶