python - 使用python在sqlite3中存储numpy数组时遇到问题

标签 python numpy sqlite

我正在尝试遵循此处显示的最佳答案的示例:Python insert numpy array into sqlite3 database

起初我以为这是我的代码,但我尝试完全复制并粘贴答案代码,但仍然遇到相同的错误:

OSError: Failed to interpret file <_io.BytesIO object at 0x02B87C00> as a pickle

convert_array 函数似乎存在问题,numpy 无法将其识别为已保存的文件(或者可能是 adjustment_array 函数未正确存储它的问题?)。我正在使用 Python 3.4.3.2 和 SQLite 3.8.9。只是好奇是否有人可以确认他们在尝试运行上面链接答案中的代码时遇到了相同的错误,特别是如果有人对如何修复它并使其工作有见解。

最佳答案

unutbu 代码的唯一问题是他的 adapt_array 在 Python 3 中引发异常:

def adapt_array(arr):
    out = io.BytesIO()
    np.save(out, arr)
    out.seek(0)
    # http://stackoverflow.com/a/3425465/190597 (R. Hill)
    return buffer(out.read())

那是因为buffer 3.x 中不存在。实际上,它在 2.x 中并没有做任何有用的事情,因此您可以将其删除。只需将最后一行替换为:

return out.read()

现在,其他一切都运行良好。

如果您需要与旧版 2.x 和 3.x 兼容(我不确定是否有任何版本与此重叠,但可能有……),您可以改为通过在模块顶部执行此操作来修复它:

try:
    buffer
except NameError:
    buffer = bytes

关于python - 使用python在sqlite3中存储numpy数组时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30063437/

相关文章:

python - libxml 解决 python 的 utf 编码问题还是我的问题?

Python > 将字符串变量传递到方法中

python - 使用 numpy 从对角线值创建数组堆栈

python - 将元素添加到数组并将其分配给同一个对象

sqlite - Thunderbird - 来自 .sqlite 库的未读消息数

sqlite - 在Websql中存储十进制值

python - 从 groupby 中选择具有最高值的行

错误处理后 while 循环中的 Python 回溯错误

python - Numpy/Scipy 稀疏与密集乘法

c - 我应该如何处理 sqlite 错误?