所以我做了一个愚蠢的事情,并且忘了显式地将我输入的一些值转换为SQLite数据库(使用Python的SQLalchemy)。该列设置为存储INT
,而输入实际上是numpy.int64
dtype。
我从数据库中返回的值如下所示:
b'\x15\x00\x00\x00\x00\x00\x00\x00'
似乎SQLite已经存储了这些值的二进制表示,而不是整数本身。
有没有办法在Python中解码这些值,还是我再次加载所有数据(此时不是一个简单的练习)?
答案 0 :(得分:4)
您可以使用struct.unpack()
:
>>> import struct
>>> value = struct.unpack('<q', b'\x15\x00\x00\x00\x00\x00\x00\x00')
>>> value
(21,)
>>> value[0]
21
假设数据以<
格式字符串中的unpack()
指定的小端存储,并且它是由{指定的签名“long long”(8字节)。 {1}}。如果数据是大端:
q
我认为在这种情况下,小端更可能是正确的。
P.S。我刚刚确认,当>>> struct.unpack('>q', b'\x15\x00\x00\x00\x00\x00\x00\x00')
(1513209474796486656,)
插入到SQLite numpy.int64
字段中时,可以使用int
检索它,如上所示。