Найти - Пользователи
Полная версия: тип при вставке в базу данных
Начало » Python для новичков » тип при вставке в базу данных
1 2 3
mrgloom
def compute_histogram_rgb(src, r_bins = 32, g_bins = 32, b_bins= 32):
    #create planes
    rplane = cv.CreateImage(cv.GetSize(src), 8, 1)
    gplane = cv.CreateImage(cv.GetSize(src), 8, 1)
    bplane = cv.CreateImage(cv.GetSize(src), 8, 1)
    planes = [rplane, gplane, bplane]
    cv.Split(src, rplane, gplane, bplane, None)
    #compute histogram
    hist = cv.CreateHist((r_bins, g_bins, b_bins), cv.CV_HIST_ARRAY,
            ranges = ((0, 255),(0, 255), (0, 255)), uniform = True)
    cv.CalcHist(planes, hist)      #compute histogram
    cv.NormalizeHist(hist, 1.0)    #normalize hist
    return hist
допустим есть код считает гистограмму у изображения, хочу вставить потом эту гистограмму в базу данных sqllite, но как я понял при создании таблицы там надо указывать тип переменной, а как храниться эта гистограмма я не знаю.
как быть?
s0rg
в sqllite типов нет - создали таблицу, записали туда данные что именно за данные это будут, ему все равно.
JOHN_16
s0rg
в SQLIte нету типов? вы точно ничего не путаете?
4kpt
Если я не ошибаюсь, sqlite хранит все данные в виде строк, поэтому DB API выполняет дополнительные операции по преобразованию :)
JOHN_16

4kpt
Посмотрите тут раздел “SQLite и Python типы данных” ближе к концу.

К тому же вот вам код, который говорит что SQLite работает только по нативным типам, если хочется подсунуть ему любой свой объект, его надо зарегистрировать.
>>> import sqlite3
>>> db=sqlite3.connect(':memory:')
>>> cursor=db.cursor()
>>> cursor.execute('create table main(id integer, value float, text text);')
>>> cursor.execute('insert into main values(?,?,?)', (13.5, 12, 111))
>>> cursor.execute('select * from main;').fetchall()
[(13.5, 12.0, u'111')]
>>> class b(object):
...     def __str__(self):
...         return 'just b'
...
>>> print b()
just b
>>> cursor.execute('insert into main values(?,?,?)', (10, 11.0, b() ))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
sqlite3.InterfaceError: Error binding parameter 2 - probably unsupported type.
>>>
mrgloom
ну так дело в том, что я не знаю какой тип у hist и python как бы безтиповый язык же.
sp3
mrgloom
python как бы безтиповый язык же.
Что за глупость. Питон - язык с динамической типизацией.
mrgloom
попробовал сделать поле для hist типа blob, но всё равно не работает.

>>> import sqlite3
>>> db=sqlite3.connect(':memory:')
>>> cursor=db.cursor()
>>> cursor.execute('create table main(id integer, hist blob);')
>>> cursor.execute('insert into main values(?,?)', (13.5, hist))
InterfaceError: Error binding parameter 1 - probably unsupported type.
4kpt
JOHN_16
Статья хорошая. Встретил про типы в книге Сузи Р… Видимо Роман ошибался :)
А по Postgresql такой статейки у Вас нет?
s0rg
А если так?
db = sqlite3.connect(':memory:')
db.execute('create table main(id, hist)')
db.execute('insert into main values(?,?)', ...)

JOHN_16
Объясняю свою точку зрения - sqllite без указания типа поля сам подберет подходящий тип данных для этого поля в случае ТС-а скорее всего будет байтовая строка. Для краткости япросто написал именно так - типов данных (как-бы) нет.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB