Форум сайта python.su
0
s0rgи так
А если так?
db = sqlite3.connect(':memory:')
db.execute('create table main(id, hist)')
db.execute('insert into main values(?,?)', …)
InterfaceError: Error binding parameter 1 - probably unsupported type.
Отредактировано mrgloom (Март 15, 2013 11:49:41)
Офлайн
25
mrgloomСделайте:
InterfaceError: Error binding parameter 1 - probably unsupported type.
print hist
Офлайн
4
sqlite поддерживает динамическую типизацию, это значит если не указан тип хранимых данных для поля, то sqlite будет преобразовывать их по определленному алгоритму (одни типы данных имеют приоритет выше, другие ниже), например у INTEGER приоритет выше чем у TEXT и т.д.
mrgloom просто выполните type(hist), когда узнаете тип преобразуйте к нужному и все.
Офлайн
0
<type ‘cv2.cv.cvhistogram’>
и к чему преобразовывать?
Офлайн
0
у нового cv2 интерфейса гистограмма вроде бы типа
<type ‘numpy.ndarray’>
но так тоже просто так не записывается в базу
Офлайн
25
Для крестов можно сделать так
Проверьте в своей библиотеке такую возможность.
Офлайн
221
4kpt
нет, я такую СУБД не пользую=)
s0rg
теперь я вас понял, в данном случае краткость сыграла скорее негативную роль). По поводу SQLIte если он не знает в какой тип преобразовать получаемое значение, то выдаст ошибку. Ну в прочем об этом и я и ТС уже сказали.
mrgloom
blob это иногда очень хорошо. А не работало у вас скорее потому что нужно сделать base64.encodestring(data), впрочем это лишь пол пути, затем вам надо считам из БД перевести обратно в исходный тип. Как это делается в вашем случае не зннаю.
Офлайн
173
Может cv2.cv.cvhistogram или numpy.ndarray (должен) поддерживают pickle?
Сохранение:
sqlite.Binary(pickle.dumps(hist))
pickle.loads(hist)
Офлайн
25
JOHN_16Согласен, но насколько я понял у ТС-а более прикладная задача (OpenCV как-никак) и он не очень дружит с типами данных в питоне, потому решил не ‘грузить’ его лишний раз. Так как он использует питон не как язык, который ему нужно выучить, а как инструмент с помощью которого он может решить свою задачу. Будет опыт - сам разберется, что к чему.
в данном случае краткость сыграла скорее негативную роль
Отредактировано s0rg (Март 16, 2013 16:04:05)
Офлайн
0
c pickle тоже не работает для cv2.cv.cvhistogram
db.execute('insert into main values(?,?)', (1, sqlite3.Binary(pickle.dumps(hist))))
Traceback (most recent call last):
File “<pyshell#13>”, line 1, in <module>
db.execute('insert into main values(?,?)', (1, sqlite3.Binary(pickle.dumps(hist))))
File “C:\Python27\lib\pickle.py”, line 1374, in dumps
Pickler(file, protocol).dump(obj)
File “C:\Python27\lib\pickle.py”, line 224, in dump
self.save(obj)
File “C:\Python27\lib\pickle.py”, line 306, in save
rv = reduce(self.proto)
File “C:\Python27\lib\copy_reg.py”, line 70, in _reduce_ex
raise TypeError, “can't pickle %s objects” % base.__name__
TypeError: can't pickle cvhistogram objects
db.execute('insert into main values(?,?)', (1, sqlite3.Binary(hist)))
Traceback (most recent call last):
File “<pyshell#14>”, line 1, in <module>
db.execute('insert into main values(?,?)', (1, sqlite3.Binary(hist)))
TypeError: buffer object expected
Офлайн