You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Pandas读取的SQL Server rowversion二进制转为可注入查询的十六进制格式

报错原因

SQL Server 的 rowversion(也叫timestamp)类型属于二进制类型,要求查询中使用的二进制字面量必须为0x开头的无引号十六进制字符串格式。而你从Pandas DataFrame中取出的rowversion是Python原生bytes类型,直接通过%s字符串拼接注入SQL时,会输出Python bytes的字面量格式b'\x00...',完全不符合SQL语法规则,因此触发语法报错。

你提供的修复方案是正确的
rowversion = rowversion.hex()
rowversion = '0x' + rowversion

这段代码的逻辑完全符合要求:bytes.hex()会将二进制数据转换为连续的十六进制字符串,拼接0x前缀后正好是SQL Server可识别的二进制字面量格式,可以正常使用。

更推荐的优化方案

直接拼接SQL字符串存在SQL注入风险,更建议使用Pandas内置的参数化查询能力,无需手动转换二进制格式,数据库驱动会自动处理类型映射:

# 以pyodbc驱动为例,参数占位符用?
sql = '''
SELECT *
FROM [dbo].[Table]
WHERE [RowVersion] > ?
ORDER BY [RowVersion] ASC
'''
# 通过params参数传值,不需要手动做格式转换
df = pd.read_sql_query(sql, source_engine, params=(rowversion,))

内容的提问来源于stack exchange,提问作者Stakky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 13:27:07