2011年8月20日土曜日

[Python] arrayからbufferに変換してsqlite3のBLOBにつっこむ。

Python + SQLite3でBLOBに値を入れるとき、"ValueError: could not convert BLOB to buffer" というエラーに悩まされていたんですが、一度 .tostring でほどいてあげないといけなかった模様。

参考:http://stackoverflow.com/questions/3983587/python-2-7-sqlite3-valueerror-could-not-convert-blob-to-buffer

こんな感じでうまくいきました。

import sqlite3
import array
a = array.array('B', [3, 1, 2,5,41,44,231,212,0,66,67,68])
b = buffer(a.tostring())
conn = sqlite3.connect ('test.db')
conn.execute ('create table if not exists test (id integer primary key, b blob)')
conn.execute ('delete from test')
conn.execute ('insert into test (b) values (?)', (b,))
conn.commit ()
cur = conn.cursor ()
cur.execute ('select b from test')
r = cur.fetchone()
print 'returned value', r[0].__class__
print 'matching', ("OK" if r[0] == b else "NG")