2016-07-08 159 views
3

因此,我做了一件愚蠢的事情,忘記了顯式地將我放入SQLite數據庫的一些值(使用Python的SQLalchemy)進行類型轉換。該列被設置爲存儲INT,而輸入實際上是dtype的numpy.int64解碼NumPy int64二進制表示

我找回了數據庫的價值是這樣的:

b'\x15\x00\x00\x00\x00\x00\x00\x00'

看來,SQLite的已經並存儲這些值的二進制表示,而不是整數本身。

有沒有辦法在Python中解碼這些值,或者我堅持重新加載我的所有數據(這不是一個簡單的練習)?

回答

4

您可以使用struct.unpack()

>>> import struct 
>>> value = struct.unpack('<q', b'\x15\x00\x00\x00\x00\x00\x00\x00') 
>>> value 
(21,) 
>>> value[0] 
21 

即假定由<unpack()格式字符串指定的數據被存儲小端,並且它是一個署名爲「長長」(8個字節)如q所述。如果數據是大端:

>>> struct.unpack('>q', b'\x15\x00\x00\x00\x00\x00\x00\x00') 
(1513209474796486656,) 

我想在這種情況下小端序更可能是正確的。

P.S.我剛剛證實,當numpy.int64插入到SQLite int字段中時,可以使用struct.unpack()來檢索,如上所示。

+0

謝謝你,這是一種魅力。數據確實是小尾巴。 –