2011-03-11 112 views
0

我有一個問題,我正在壓縮和存儲到一個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

在此先感謝!

+1

您是否嘗試過比較進入數據庫的值和出來的值?我不只是在檢查它們是否相等,而是要看你在每種情況下得到的字節序列,並查看它們在哪裏開始有所不同以及如何。發生零字節或高位字節或其他什麼情況時會發生什麼?你的價值在某處被截斷了嗎?之類的東西。 –

回答

1
+0

我在我的param_value上調用了緩衝區,爲postgres做好了準備。我們已經將這個代碼移動到了一個新的框中,但是這個代碼不起作用,但是我們在另一個框上有這個代碼的工作版本......這兩個linux框都使用相同版本的python和相同的postgres數據庫...這就是爲什麼這是相當令人費解的......我已經看到了這項工作,但是在一臺新的服務器上,它不是 – deecodameeko

+0

行,所以代碼在以前工作。新的環境,它有麻煩。看起來像zlib並不開心。 http://docs.python.org/library/zlib.html#zlib.decompress可能需要在這裏設置一些額外的參數。 – kevpie

+0

我嘗試改變wbits值8-15甚至疲倦的負面wbits ....不知道如何處理buffsize參數,雖然... – deecodameeko