如何使用 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?
我现在没有时间给出一个完整的工作示例。相反,我将提供一个大纲:
- 从数据库中读取列
data = cur.fetchone()[0]
- 使用 Python gzip 模块。
json_data = gzip.decompress(data)
其中 json_data 是字节对象。
- 使用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 模块的版本问题。无论如何,我能够使用以下方式解压缩:
将列转换并存储为字节数组:-
payload = bytearray(row[0])
为了解压,使用下面的代码片段:
fileobj = cStringIO.StringIO(payload)
gzf = gzip.GzipFile('dummy-name', 'rb', 9, fileobj)
decomprJson = gzf.read()
我在 postgres 数据库中有一列数据类型为 bytea,编码为 compressed_json。如何读取此列的值并在 Python 中返回正确的 json?
我现在没有时间给出一个完整的工作示例。相反,我将提供一个大纲:
- 从数据库中读取列
data = cur.fetchone()[0]
- 使用 Python gzip 模块。
json_data = gzip.decompress(data)
其中 json_data 是字节对象。
- 使用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 模块的版本问题。无论如何,我能够使用以下方式解压缩:
将列转换并存储为字节数组:-
payload = bytearray(row[0])
为了解压,使用下面的代码片段:
fileobj = cStringIO.StringIO(payload) gzf = gzip.GzipFile('dummy-name', 'rb', 9, fileobj) decomprJson = gzf.read()