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

时间:2015-05-05 21:21:58

标签: 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并未将其识别为已保存的文件(或者可能是adap_array函数存在问题,而不是正确存储它?)。我使用的是Python 3.4.3.2和SQLite 3.8.9。只是好奇是否有人可以确认他们在上面的链接答案中尝试运行代码时会遇到相同的错误,特别是如果有人对如何解决它并使其工作有任何见解。

1 个答案:

答案 0 :(得分:1)

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())

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

return out.read()

现在,其他一切都很完美。

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

try:
    buffer
except NameError:
    buffer = bytes