sql中的HASHBYTES、sha2_256在从python调用时会引入错误字符

2024-09-26 21:52:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我们的旧sql遗留代码之一,使用HASHBYTES函数和sha2_256转换sql中的数字列

整个过程都在向python迁移,因为我们在遗留工作的基础上添加了一些高级用法。然而,当使用连接器时,我们调用的是相同的sql代码,HASHBYTES('sha2_256',column_name)id返回的值包含大量垃圾

在sql中运行代码会导致以下情况

Column      Encoded_Column
101286297   0x7AC82B2779116F40A8CEA0D85BE4AA02AF7F813B5383BAC60D5E71B7BDB9F705

从python运行相同的sql查询会导致

Column      Encoded_Column
101286297 

b“z\xc8+'y\x11o@\xa8\xce\xa0\xd8[\xe4\xaa\x02\xaf\x7f\x81;S\x83\xba\xc6\r^q\xb7\xbd\xb9\xf7\x05”

代码是

Select Column,HASHBYTES('SHA2_256', CONVERT(VARBINARY(8),Column)) as Encoded_Column from table

我尝试过通常的垃圾清理,但没有帮助


Tags: 函数代码nameid用法sql过程column
1条回答
网友
1楼 · 发布于 2024-09-26 21:52:42

您得到了正确的结果,但显示为原始字节(这就是为什么在b"..."中有b)

查看SQL的结果,您可以使用十六进制编码数据

因此,要转换python结果,可以执行以下操作:

x = b"z\xc8+'y\x11o@\xa8\xce\xa0\xd8[\xe4\xaa\x02\xaf\x7f\x81;S\x83\xba\xc6\r^q\xb7\xbd\xb9\xf7\x05"

x.hex().upper()

结果将是:

'7AC82B2779116F40A8CEA0D85BE4AA02AF7F813B5383BAC60D5E71B7BDB9F705'

这就是SQL中的内容

您可以在SQL结果的开头阅读有关here的更多信息,python代码中没有该结果

最后,如果使用pandas,可以使用以下命令转换整个列:

df["Encoded_Column"] = df["Encoded_Column"].apply(lambda x: x.hex().upper())

# And if you want the '0x' at the start do:
df["Encoded_Column"] = "0x" + df["Encoded_Column"]

相关问题 更多 >

    热门问题