Мне нужно записать объект Obj-C (например, NSString в этом случае) в базу данных sqlite и сохранить его в столбце BLOB, используя Python 2.7.
В этой степени я написал этот демонстрационный код, который не работает с приведенной ниже трассировкой.
from sqlite3 import connect
from Foundation import NSArchiver
conn = connect(':memory:')
create = "CREATE TABLE test(data BLOB)"
conn.execute(create)
conn.commit()
blob = NSArchiver.archivedDataWithRootObject_("Hello World").bytes()
print type(blob), blob
sql = "INSERT INTO test VALUES (?)"
data = [blob]
conn.execute(sql, data)
conn.commit()
Это прослеживается с:
$ ./sqlite3_test.py
<type 'memoryview'> <memory at 0x104a5e218>
Traceback (most recent call last):
File "./sqlite3_test.py", line 16, in <module>
conn.execute(sql, data)
sqlite3.InterfaceError: Error binding parameter 0 - probably unsupported type.
Никакое количество магии, использующей sqlite3.Binary
(которое определяется как Binary = buffer
внутри модуля sqlite3) или .tobytes()
(из memoryview ), не улучшило эту работу.
Я также пытался создать объект buffer () из BLOB-объекта NSArchiver, но наивный подход:
b = buffer(blob, 0, len(blob))
восходит к TypeError: buffer object expected
- возможно, объекты NSArchiver не являются строками Python.