我试图用Python从MySQL数据库中读取BLOB对象。 BLOB对象是NumPy数组。
要将数组转换为缓冲区类型以插入数据库,我使用以下函数:
numpy.getbuffer(arr)
回读后,我可以通过以下方式重新创建缓冲区对象:
bytes(memoryview(arr))
此时一切正常。在缓冲区对象上使用下面的函数尝试将其转换回NumPy数组时出现了我的问题:
numpy.frombuffer(arr, dtype=numpy.float64)
错误如下:
ValueError: buffer size must be a multiple of element size
请注意dtype设置正确,我的Python版本是2.7.13,NumPy是1.13.3。
编辑:所以在做一些进一步挖掘时,这里有一些额外的信息和我偶然发现的特点:
numpy.getbuffer(arr)
对象的长度为7392.如果我从MySQL DB中打印返回值的长度(例如,使用cursor.fetchall() or fetchone()
返回),则长度为7668。
所以我打印了每个对象的前30个字符,虽然它们显然是一样的,但从DB返回的对象还有许多其他字符:
DB之前:
?=G????B?i?j??w??LG???ࢩ?a
DB之后:
'?=G????B?i?\0j??w??LG???ࢩ?
我认为问题源于数据存储在数据库中的方式。我的理由是以下代码不会产生错误:
numpy.frombuffer(numpy.getbuffer(arr), dtype=numpy.float64)
谢谢, 亚当