我正在尝试在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()
答案 0 :(得分:2)
Cristian Ciupitu关于该错误的说明是正确的,但bytes(ar)
将为您提供__str__表示而不是序列化输出。因此,请使用ar.tostring()
。
使用array.fromstring
再次反序列化数组 - 您必须创建一个具有相同类型的数组对象,然后调用.fromstring(...)
。