Python 2.7, sqlite3, ValueError: не удалось преобразовать BLOB в буфер - PullRequest
3 голосов
/ 21 октября 2010

Я пытаюсь сохранить большой двоичный объект, созданный из целочисленного массива (то есть упакованного массива целых чисел), в БД SQLite. Сценарий, показанный ниже, дает следующую трассировку. Насколько я вижу из документации по Python 2.7 sqlite3, должна быть возможность вставить буферный объект в таблицу, где он должен быть сохранен как BLOB. Однако я не могу сделать эту работу. (FWIW, isinstance (b, buffer) печатает True, если вставлен в скрипт, поэтому я действительно создаю объект буфера.)

Есть предложения?

Спасибо, -Р.

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 Ответ

2 голосов
/ 21 октября 2010

Замечание Кристиана Чиупиту об ошибке верно, но bytes(ar) даст вам представление __str__ вместо сериализованного вывода.Поэтому используйте ar.tostring().

Используйте array.fromstring для повторной десериализации массива - вам нужно создать объект массива того же типа и затем вызвать .fromstring(...).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...