peewee.InterfaceError:保存大量数据时绑定参数错误

Posted

技术标签:

【中文标题】peewee.InterfaceError:保存大量数据时绑定参数错误【英文标题】:peewee.InterfaceError: Error binding parameter while saving big amout of data 【发布时间】:2018-07-30 18:47:06 【问题描述】:

我在我的数据库中创建了许多记录,如下所示:

Subproducts.create(mf_id=mf_id, co=co, mf_binary=mf_binary_data.getbuffer())

mf_binary 类型为 io.BytesIO() - 它是收集到 zipfile 中的二进制文件的二进制表示

我已经使用这种方法成功创建了许多记录,但是我遇到了一个特定数据集的问题。 它比其他的要大,大约需要 1.2GB。 当我尝试将其保存在 DB 中时,会发生以下错误。 peewee.InterfaceError: Error binding parameter 2 - probably unsupported type.

我的模型中 mf_binary 的字段是peewee.BlobField(default=b'0')

如何将此类数据存储在 peewee 数据库中?

【问题讨论】:

【参考方案1】:

调用getbuffer() 返回一个memoryview 对象,该对象显然不受底层数据库驱动程序的支持(顺便说一句,它是哪一个?)。 InterfaceError 是由您的数据库驱动程序引发的,而不是 Peewee,这表明问题来自您的驱动程序不了解如何处理 memoryview 对象。

最好的办法是使用mf_binary_data.getvalue(),它应该返回一个bytes 对象。

【讨论】:

我使用 Sqlite 驱动。我尝试使用getvalue() 而不是getbuffer(),但它没有帮助。我对其他数据集没有任何问题。我可以将它们存储在数据库中并将它们提取到文件中。但是我有一个导致问题的数据集,可能是因为大小。任何想法如何解决这个问题? “但它没有帮助”——你肯定不会在尝试插入字节串时收到同样的错误吗?

以上是关于peewee.InterfaceError:保存大量数据时绑定参数错误的主要内容,如果未能解决你的问题,请参考以下文章

保存非常大的 uiimage 文件

Matlab保存忽略大单元格数组

在 iOS 上保存大数组的最佳方法

Python - 保存除大属性外的整个类对象

ImageResizer - 将图像保存为更大尺寸

在 iOS 应用程序上保存大文件