【问题标题】:HASHBYTES, sha2_256 in sql introduce bad characters when called from python从 python 调用时,sql 中的 HASHBYTES、sha2_256 会引入坏字符
【发布时间】:2020-05-04 18:20:45
【问题描述】:

我们的旧 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

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

【问题讨论】:

  • 你的问题本质上是“如何在python中读取varbinary类型的值?”

标签: python sql pandas connector hashbytes


【解决方案1】:

您得到了正确的结果,但显示为原始字节(这就是为什么您在 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 中所拥有的。

您可以阅读更多关于0xhere0x 在python 代码中不存在的SQL 结果。

最后,如果您正在使用 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"]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-23
    • 2021-03-21
    • 1970-01-01
    • 1970-01-01
    • 2011-04-12
    • 2010-09-09
    • 1970-01-01
    相关资源
    最近更新 更多