【问题标题】:Proper way to convert bytea from Postgres back to a string in python将bytea从Postgres转换回python中的字符串的正确方法
【发布时间】:2015-03-26 00:21:01
【问题描述】:

我有一个小脚本,用于生成 SHA1 哈希,通过 hashlib 的 hexdigest 获取二进制表示,并将它们存储在带有 bytea 列的 Postgres DB 中。我在 Postgres(缩写)中有一个类似这样的查询:

SELECT * FROM some_table WHERE some_hash in decode(another_hash, 'hex')

执行查询时,我的一些代码如下所示:

cur.execute(query)
for hash_rep in cur:
    print bhash

现在,在该打印语句中,它将打印出难以理解的字符,或者如果我将其更改为:

print str(psycopg2.Binary(bhash))

我得到类似的东西:

'\214p\203\030\017K\247\373o\253'::bytea

将其转换回原始字符串的正确方法是什么?原始表示类似于“30d22d5d64efe4c5333e”,我想将其恢复为原始字符串以进行比较。我不确定我是否遗漏了一些明显的东西,

【问题讨论】:

    标签: python postgresql psycopg2 bytea


    【解决方案1】:

    由于您要求 Postgres 解码您的十六进制字符串并将其存储为二进制,您应该要求 postgres 在输出时将其编码回十六进制。

    SELECT encode(some_hash, 'hex'), * FROM some_table WHERE some_hash in decode(another_hash, 'hex')
    

    或者,您可以在 python 中进行编码。试试binascii.hexlify(data)

    【讨论】:

      猜你喜欢
      • 2021-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-16
      • 2019-09-24
      • 2014-07-23
      • 1970-01-01
      相关资源
      最近更新 更多