mrgloom
Март 15, 2013 11:49:29
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.
s0rg
Март 15, 2013 13:04:40
mrgloom
InterfaceError: Error binding parameter 1 - probably unsupported type.
Сделайте:
Что у вас там?
Loki
Март 15, 2013 13:07:48
sqlite поддерживает динамическую типизацию, это значит если не указан тип хранимых данных для поля, то sqlite будет преобразовывать их по определленному алгоритму (одни типы данных имеют приоритет выше, другие ниже), например у INTEGER приоритет выше чем у TEXT и т.д.
mrgloom просто выполните type(hist), когда узнаете тип преобразуйте к нужному и все.
mrgloom
Март 15, 2013 15:04:31
<type ‘cv2.cv.cvhistogram’>
и к чему преобразовывать?
mrgloom
Март 15, 2013 15:10:50
у нового cv2 интерфейса гистограмма вроде бы типа
<type ‘numpy.ndarray’>
но так тоже просто так не записывается в базу
s0rg
Март 15, 2013 15:28:56
Для крестов можно сделать
такПроверьте в своей библиотеке такую возможность.
JOHN_16
Март 16, 2013 10:07:08
4kpt
нет, я такую СУБД не пользую=)
s0rg
теперь я вас понял, в данном случае краткость сыграла скорее негативную роль). По поводу SQLIte если он не знает в какой тип преобразовать получаемое значение, то выдаст ошибку. Ну в прочем об этом и я и ТС уже сказали.
mrgloom
blob это иногда очень хорошо. А не работало у вас скорее потому что нужно сделать base64.encodestring(data), впрочем это лишь пол пути, затем вам надо считам из БД перевести обратно в исходный тип. Как это делается в вашем случае не зннаю.
reclosedev
Март 16, 2013 10:45:05
Может cv2.cv.cvhistogram или numpy.ndarray (должен) поддерживают
pickle?
Сохранение:
sqlite.Binary(pickle.dumps(hist))
Загрузка:
s0rg
Март 16, 2013 15:53:59
JOHN_16
в данном случае краткость сыграла скорее негативную роль
Согласен, но насколько я понял у ТС-а более прикладная задача (OpenCV как-никак) и он
не очень дружит с типами данных в питоне, потому решил не ‘грузить’ его лишний раз. Так как он использует питон не как язык, который ему нужно выучить, а как инструмент с помощью которого он может решить свою задачу. Будет опыт - сам разберется, что к чему.
UPD: Кстати да - плюсую pickle
mrgloom
Март 18, 2013 08:06:26
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