我有一個問題,我正在壓縮和存儲到一個postgres數據庫的字典。我可以壓縮字典和無故障解壓縮,但是當我將其插入到數據庫中,然後選擇它,並嘗試解壓縮數據我得到一個錯誤:zlib解壓縮頭檢查錯誤
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
在此先感謝!
您是否嘗試過比較進入數據庫的值和出來的值?我不只是在檢查它們是否相等,而是要看你在每種情況下得到的字節序列,並查看它們在哪裏開始有所不同以及如何。發生零字節或高位字節或其他什麼情況時會發生什麼?你的價值在某處被截斷了嗎?之類的東西。 –