zlib 解压头检查错误

0 投票
1 回答
1907 浏览
提问于 2025-04-16 13:32

我在处理一个字典的时候遇到了问题,我想把它压缩后存储到Postgres数据库里。我可以顺利地压缩和解压这个字典,但当我把它插入数据库后,再取出来尝试解压时却出现了错误:

zlib.error: Error -3 while decompressing data: incorrect header check

这是我写的一个测试脚本,用来模拟所有的步骤:

import zlib
import cPickle
import psycopg2

try:
    db = psycopg2.connect( database='*****', user='*****', password='*****',host='******')
    cursor = db.cursor()

except:
    print 'no db'

atom_id = 166503
params = {'submission': 'RVBV4SXLVVDNAAKIG2LIJKZQ', 'campaign': 'p3percybot', 'dob': '2011-03-11', 'rndrpath': '/mnt/webservices/store/p3percybot/rndr/2011-03-11/RVBV4SXLVVDNAAKIG2LIJKZQ', 'outpath': '/mnt/webservices/store/p3percybot/out/2011-03-11/RVBV4SXLVVDNAAKIG2LIJKZQ', 'srcpath': '/mnt/webservices/store/p3percybot/src', 'root': '/mnt/webservices/store', 'inpath': '/mnt/webservices/store/p3percybot/in/2011-03-11/RVBV4SXLVVDNAAKIG2LIJKZQ'}

print params
params_list = []
for k in params :
        param_name = k
        param_value = cPickle.dumps(params[k])
        param_value = zlib.compress(param_value,9)
        param_value = buffer(param_value)
        params_list.append((param_value,atom_id, param_name))

print params_list

sql = 'UPDATE atomparams set value = %s where atomid=%s and name=%s'
cursor.executemany(sql, (params_list))

sql = 'SELECT name, value FROM atomparams WHERE atomid=%s'
cursor.execute(sql, (atom_id,))
result = cursor.fetchall()

print '\n-----------------result-----------------'
print result
for data in result:
   print data[0]
   data_string = zlib.decompress(data[1])
   print data_string

如果有人能给我一些建议,为什么在数据库里会出现这种问题,我会非常感激。我想说明一下,存储这个值的字段类型是bytea。

提前谢谢大家!

1 个回答

撰写回答