pymssql查询传参为数量较大的tuple时报错原因分析

文章讲述了在使用pymssql库进行SQL查询时遇到的8632错误,该错误由于传入的元组参数过大导致。通过官方文档了解到这是SQLServer的内部错误限制。作者通过逐步排查,发现元组大小在30000-40000之间时会出现问题。为解决此问题,提出了两种策略:一是拆分元组并多次查询,二是修改查询语句结构。
摘要由CSDN通过智能技术生成

1.报错代码:pymssql._pymssql.OperationalError: (8632, b'Internal error: An expression services limit has been reached. Please look for potentially complex expressions in your query, and try to simplify them.DB-Lib error message 20018, severity 17:\nGeneral SQL Server error: Check messages from the SQL Server\n')

2.检索对应报错代码官方文档说明MSSQLSERVER_8632 - SQL Server | Microsoft LearnMSSQLSERVER_8632https://learn.microsoft.com/zh-CN/sql/relational-databases/errors-events/mssqlserver-8632-database-engine-error?view=sql-server-ver16

 3.分析原因得出大概率是传参元组的数量过大导致报错

4.尝试只用该元组的前10值作为新元组传参测试,可以正常查询

5.尝试探索元组峰值,大概位于30000-40000之间

6.解决方法:(1)根据峰值分割元组,在限制范围内多次查询子元组后汇总数据;

                     (2)修改查询语句,'select * from XX  where y in %s',tuple改为:

‘select * from XX where y  in %s or y in %s ...or y in %s.’,tuple1,tuple2,...tupleN

                     (3)其他

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值