2011-04-07 72 views
0

我正在使用Python 2.6從SQL Server讀取數據。我卡住了,因爲我的數據庫中的列是varbinary。我使用的是pyodbc,Python程序中的數據類型是「緩衝區」。使用Python從MS SQL Server讀取zlib/gzip壓縮數據

現在,DB中的這個列存儲gzip壓縮文本。我無法弄清楚如何從Python中解壓縮,只要有'緩衝'數據類型的訪問權限。

任何幫助/指針?

這是我在做什麼提前

con = pyodbc.connect(...) 
cursor = con.cursor() 
cursor.execute('select ...') 
row = cursor.fetchone() 

if row: 
    x = row.varbinary_column_name 
    asciistring = zlib.decompress(x) # throws zlib.error: Error -3 while 
            # decompressing data: incorrect header check 

謝謝!

+0

zlib.decompress是否僅以zlib格式工作,還是透明地支持gzip? (他們不同) – 2011-04-07 06:49:43

+0

@pst,我的意思是隻有zlib格式。不是真正的gzip文件或其他東西。 – ragebiswas 2011-04-07 06:51:56

+0

@Raj然後不知道:-) gzip包裝器/頭文件與zlib包裝器不同(我相信兩者都使用相同的deflate算法)。否則,驗證數據庫中的數據,然後從數據庫加載的數據與預期數據匹配。 (只是簡單的md5sum)。 – 2011-04-07 06:52:58

回答

0

這樣做:

print repr(x[:3]) 

zlib流通常與3個字節x\x9cc開始。流總是以2個字節\x1f\x8b開始。你有什麼?

根據你的評論,結果是'+J\xcd'。這看起來不是zlibgzip。你有什麼文件?您是否擁有創建該數據的源代碼?

+0

@Raj:這個答案對你有幫助嗎?如果沒有,爲什麼不呢?如果是的話,請考慮接受答案。 – 2011-04-08 21:46:41

+0

John,對不起,延遲。輸入: ''type'buffer'>' ''+ J \ xcd'' – ragebiswas 2011-04-12 05:52:11

+0

@Raj:看到我編輯的答案。 – 2011-04-12 19:40:26