2010-04-25 63 views
1

我想在python中打开一个图像文件并将该数据添加到sqlite表。我使用以下方式创建了表格: “CREATE TABLE”images“(”id“INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,”description“VARCHAR,”image“BLOB);”使用python插入文件数据到sqlite数据库的问题

我试图使用图像添加到数据库:

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' 我得到'????'打印到控制台。任何人都知道我在做什么错了?

+0

您使用的是什么版本的Python? – dan04 2010-04-25 03:48:16

回答

2

它适用于我的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                 
▒                  
[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

呀它怪异的,当我在python查询数据库,将二进制数据后,它让我看到的数据被成功地插入(它喷出的二进制数据到屏幕)。当我这样做:sqlite3 database_file.sqlite“从图像中选择图像”在命令行上,这就是当我看到'????'。也许这就是'sqlite3'命令如何打印二进制数据?这看起来不正确。我正在使用python 2.6.1

+0

原来,sqlite3是如何在命令行上表示二进制数据的。 – Tylerc230 2010-05-20 19:26:45