Не уверен, что это за sqlite.Binary
, который вы используете, но, в любом случае, вот рабочий пример:
import sqlite3
# let's just make an arbitrary binary file...
with open('/tmp/abin', 'wb') as f:
f.write(''.join(chr(i) for i in range(55)))
# ...and read it back into a blob
with open('/tmp/abin', 'rb') as f:
ablob = f.read()
# OK, now for the DB part: we make it...:
db = sqlite3.connect('/tmp/thedb')
db.execute('CREATE TABLE t (thebin BLOB)')
db.execute('INSERT INTO t VALUES(?)', [buffer(ablob)])
db.commit()
db.close()
# ...and read it back:
db = sqlite3.connect('/tmp/thedb')
row = db.execute('SELECT * FROM t').fetchone()
print repr(str(row[0]))
При запуске с Python 2.6 этот код показывает, как и ожидалось:
«\ X00 \ x01 \ x02 \ x03 \ x04 \ x05 \ x06 \ X07 \ x08 \ т \ п \ x0b \ x0c \ г \ x0e \ X0F \ x10 \ x11 \ x12 \ x13 \ x14 \ x15 \ x16 \ x17 \ x18 \ x19 \ x1a \ x1b \ x1c \ x1d \ x1e \ x1f! "# $% & \ '() * +, -. / 0123456'
Обратите внимание на необходимость использования buffer
для вставки большого двоичного объекта и str
для чтения его обратно в виде строки (поскольку в результате он также использует тип buffer
) - если вы просто собираетесь для записи его на диск последний отрывок не понадобится (поскольку метод файлов write
принимает объекты буфера так же, как он принимает строки).