如何使用 PYTHON 读取数据类型为 BYTEA 的 postgres DB 中的列和压缩 json 的编码

How to read column in postgres DB of data type BYTEA and encoding of compressed json using PYTHON

我在 postgres 数据库中有一列数据类型为 bytea,编码为 compressed_json。如何读取此列的值并在 Python 中返回正确的 json?

我现在没有时间给出一个完整的工作示例。相反,我将提供一个大纲:

  1. 从数据库中读取列
   data = cur.fetchone()[0]
  1. 使用 Python gzip 模块。

json_data = gzip.decompress(data)

其中 json_data 是字节对象。

  1. 使用Pythonjson模块读取json_data.

更新。 示例:

create table js_compressed(js_fld bytea);

js_str = b'[{"one": 1, "two": 2}, {"three": 3, "four": 4}]'
js_cmp = gzip.compress(js_str)
con = psycopg2.connect("dbname=test user=aklaver host=localhost") 
cur = con.cursor()
cur.execute("insert into js_compressed(js_fld) values(%s)", (psycopg2.Binary(js_cmp,),))
cur.execute("select js_fld from js_compressed limit 1")
js_fld = cur.fetchone()[0]
dc_fld = gzip.decompress(js_fld).decode()
json.loads(dc_fld)
[{'one': 1, 'two': 2}, {'three': 3, 'four': 4}]

但是方法gzip.compress和解压没有显示。可能是我的 gzip 模块的版本问题。无论如何,我能够使用以下方式解压缩:

  1. 将列转换并存储为字节数组:-

       payload = bytearray(row[0]) 
    
  2. 为了解压,使用下面的代码片段:

       fileobj = cStringIO.StringIO(payload)
       gzf = gzip.GzipFile('dummy-name', 'rb', 9, fileobj)
       decomprJson = gzf.read()