2010-04-25 6 views
1

J'essaie d'ouvrir un fichier image en python et d'ajouter ces données à une table sqlite. J'ai créé la table en utilisant: "CREATE TABLE" images "(" id "INTÉRIEUR PRINCE CLÉ AUTOINCREMENT NON NULL," description "VARCHAR," image "BLOB);"Problèmes d'insertion de données de fichier dans la base de données sqlite en utilisant python

Je suis en train d'ajouter l'image à la DB en utilisant:

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)) 

Lorsque j'imprime la valeur de « b » il ressemble à des données binaires, mais quand je l'appelle: « image sélectionner à partir d'images où id = 1 ' Je reçois' ???? ' imprimé sur la console. Quelqu'un sait ce que je fais mal?

+0

Quelle version de Python utilisez-vous? – dan04

Répondre

2

Cela fonctionne pour moi avec Python 2.6.4, pysqlite (sqlite3.version) 2.4.1, et une image de test png. Vous devez déballer le tuple.

>>> import sqlite3              
>>> conn = sqlite3.connect(":memory:")         
>>> targetCursor = conn.cursor()          
>>> imageName = "blue.png"            
>>> imageFile = open(imageName, 'rb')         
>>> b = sqlite3.Binary(imageFile.read())        
>>> print b               
�PNG                 
▒                  
[email protected]%                 
     ��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 
▒ 
[email protected]% 
     ��sRGB��� pHYs 

        ��▒tIME� 
0�\"▒'S�A�:hVO\��8�}^c��"]IEND�B`� 
0

Ouais son bizarre, quand j'interroger la base en python, après l'insertion des données binaires, il me montre les données ont été insérées avec succès (il vomit des données binaires à l'écran). Quand je fais: sqlite3 database_file.sqlite "SELECT image from images" sur la ligne de commande, c'est quand je vois le '????'. Peut-être que c'est juste la façon dont la commande 'sqlite3' imprime des données binaires? Cela ne semble pas juste. J'utilise python 2.6.1

+0

Il s'avère que la façon dont sqlite3 représente les données binaires sur la ligne de commande. – Tylerc230