将Python缓冲区转换为NumPy数组 - ValueError:缓冲区大小必须是元素大小

时间:2018-01-27 02:55:32

标签: python mysql numpy

我试图用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)

谢谢, 亚当

0 个答案:

没有答案