如何读取数据类型为BYTEA的postgres数据库中的列以及使用PYTHON对压缩json进行编码



我在postgres DB中有一列数据类型为byta,编码为compressed_json。如何读取此列的值并在Python中获得正确的json?

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

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

    payload = bytearray(row[0]) 
    
  2. 对于解压缩,使用以下代码片段:

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

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

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

json_data = gzip.decompress(data)

其中json_data是一个字节对象。

  1. 使用Python json模块读取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}]

相关内容

  • 没有找到相关文章

最新更新