Правильный способ конвертировать bytea из Postgres обратно в строку в Python
У меня есть небольшой скрипт, в котором я генерирую хэши SHA1, беру двоичное представление через hexdigest хешлиба и сохраняю их в БД Postgres со столбцом bytea. У меня есть запрос, который выглядит в Postgres (сокращенно):
SELECT * FROM some_table WHERE some_hash in decode(another_hash, 'hex')
При выполнении запроса у меня есть код, который выглядит следующим образом:
cur.execute(query)
for hash_rep in cur:
print bhash
Теперь в этом операторе print он будет либо выводить неразборчивые символы, либо, если я его поменяю на:
print str(psycopg2.Binary(bhash))
Я получаю что-то вроде:
'\214p\203\030\017K\247\373o\253'::bytea
Как правильно преобразовать его обратно в исходную строку? Исходные представления являются чем-то вроде "30d22d5d64efe4c5333e", и я хотел бы вернуть его к этой исходной строке для сравнения. Я не уверен, что упускаю что-то очевидное,
1 ответ
Поскольку вы попросили Postgres декодировать вашу шестнадцатеричную строку и сохранить ее в двоичном виде, вы должны попросить postgres закодировать ее обратно в шестнадцатеричный формат при выводе.
SELECT encode(some_hash, 'hex'), * FROM some_table WHERE some_hash in decode(another_hash, 'hex')
В качестве альтернативы, вы можете сделать кодирование в Python. Попробуйте binascii.hexlify (data).