Python 2.7,sqlite3,ValueError:无法将BLOB转换为缓冲区

时间:2010-10-21 01:17:02

标签: python sqlite

我正在尝试在SQLite DB中保存从整数数组(即整数的打包数组)创建的BLOB。下面显示的脚本给出了以下回溯。从Python 2.7 sqlite3文档中我可以看到,应该可以将缓冲区对象插入到表中,它应该保存为BLOB。但是,我无法完成这项工作。 (FWIW,isinstance(b,buffer)如果插入到脚本中则打印为True,所以我确实在创建一个缓冲区对象。)

有什么建议吗?

谢谢, -P

Traceback (most recent call last):
  File "example.py", line 13, in <module>
    conn.execute( 'insert into foo values (?)', (b,) ) # <=== line 14
ValueError: could not convert BLOB to buffer

import sqlite3
import sys
import array

ar = array.array( 'I' )
ar.extend( [1,0,3,11,43] )
b = buffer( ar )

conn = sqlite3.connect( ':memory:' )
conn.execute( 'create table foo( bar BLOB )' )
conn.commit()

conn.execute( 'insert into foo values (?)', (b,) ) # <=== line 14
conn.commit()

1 个答案:

答案 0 :(得分:2)

Cristian Ciupitu关于该错误的说明是正确的,但bytes(ar)将为您提供__str__表示而不是序列化输出。因此,请使用ar.tostring()

使用array.fromstring再次反序列化数组 - 您必须创建一个具有相同类型的数组对象,然后调用.fromstring(...)