【问题标题】:Trouble storing numpy array in sqlite3 with python使用python在sqlite3中存储numpy数组时遇到问题
【发布时间】:2015-05-05 21:21:57
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: python numpy sqlite


    【解决方案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())
    

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

    return out.read()
    

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

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

    try:
        buffer
    except NameError:
        buffer = bytes
    

    【讨论】:

    • 太棒了!谢谢您的帮助。我认为这可能是 Python2/3 的一些问题,这就是为什么我提到我正在运行的版本,并且我浏览了 io 文档,但我没有明白这一点。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-22
    • 1970-01-01
    • 2018-06-10
    • 2011-04-01
    • 2019-09-13
    相关资源
    最近更新 更多