Проблемы вставки файловых данных в базу данных sqlite с использованием python - PullRequest
1 голос
/ 25 апреля 2010

Я пытаюсь открыть файл изображения в python и добавить эти данные в таблицу sqlite. Я создал таблицу, используя: "CREATE TABLE" images "(" id "AUTOINCREMENT INTEGER PRIMARY KEY NOT NULL", описание "VARCHAR," изображение "BLOB);"

Я пытаюсь добавить изображение в БД, используя:

imageFile = open(imageName, 'rb')
b = sqlite3.Binary(imageFile.read())
targetCursor.execute("INSERT INTO images (image) values(?)", (b,))
targetCursor.execute("SELECT id from images")
for id in targetCursor:
    imageid= id[0]

targetCursor.execute("INSERT INTO %s (questionID,imageID) values(?,?)" % table, (questionId, imageid))

Когда я печатаю значение 'b', оно выглядит как двоичные данные, но когда я вызываю: 'выбрать изображение из изображений, где id = 1' Я получил '????' выводится на консоль. Кто-нибудь знает, что я делаю не так?

Ответы [ 2 ]

2 голосов
/ 25 апреля 2010

Это работает для меня с Python 2.6.4, pysqlite (sqlite3.version) 2.4.1 и png тестовое изображение. Вы должны распаковать кортеж.

>>> import sqlite3                                                    
>>> conn = sqlite3.connect(":memory:")                                
>>> targetCursor = conn.cursor()                                      
>>> imageName = "blue.png"                                            
>>> imageFile = open(imageName, 'rb')                                 
>>> b = sqlite3.Binary(imageFile.read())                              
>>> print b                                                           
�PNG                                                                  
▒                                                                     
IHDR@%                                                                
      ��sRGB��� pHYs                                                  

                    ��▒tIME�
0�\"▒'S�A�:hVO\��8�}^c��"]IEND�B`�
>>> targetCursor.execute("create table images (id integer primary key, image BLOB)")
<sqlite3.Cursor object at 0xb7688e00>
>>> targetCursor.execute("insert into images (image) values(?)", (b,))
<sqlite3.Cursor object at 0xb7688e00>
>>> targetCursor.execute("SELECT image from images where id = 1")
<sqlite3.Cursor object at 0xb7688e00>
>>> for image, in targetCursor:
...     print image
...
�PNG
▒
IHDR@%
      ��sRGB��� pHYs

                    ��▒tIME�
0�\"▒'S�A�:hVO\��8�}^c��"]IEND�B`�
0 голосов
/ 25 апреля 2010

Да, это странно, когда я запрашиваю базу данных в python, после вставки двоичных данных он показывает, что данные были успешно вставлены (он выводит двоичные данные на экран). Когда я делаю: sqlite3 database_file.sqlite «ВЫБРАТЬ изображение из изображений» в командной строке, вот когда я вижу «????». Возможно, именно так команда sqlite3 печатает двоичные данные? Это не кажется правильным. Я использую Python 2.6.1

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