Python3使用pymssql查询SQL Server序列current_value返回异常值
问题根因
你当前的转换逻辑确实存在错误,核心是字节序参数配置错误:
- SQL Server的数值类型存储采用小端序(little-endian),你调用
int.from_bytes时传入了byteorder="big"大端序参数,会把字节顺序完全倒置解析,自然得到完全不符合预期的超大数值。
临时修复方案
直接修改转换代码的字节序参数即可得到正确结果:
currentValue = int.from_bytes(cursor.fetchone()[0], byteorder="little")
最优解决方案(避免手动转换)
出现字节返回的本质原因是pymssql默认的TDS协议版本过低,没有正确识别sys.sequences中current_value的bigint数值类型,你可以从根源解决问题,无需手动做字节转换:
- 建立数据库连接时指定更高版本的TDS协议:
conn = pymssql.connect(server='你的服务器地址', user='用户名', password='密码', database='库名', tds_version='7.3')
- 或者在SQL查询中手动做类型转换,让驱动直接返回整数:
select cast(current_value as int) from sys.sequences where name = 'testSequence'
内容的提问来源于stack exchange,提问作者TheLovelySausage
相关产品推荐
相关产品推荐

