使用python将文件数据插入sqlite数据库时出现问题

时间:2010-04-25 03:39:33

标签: python sqlite blob

我正在尝试在python中打开一个图像文件,并将该数据添加到sqlite表中。我使用以下方法创建了表: “CREATE TABLE”图像“(”id“INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,”description“VARCHAR,”image“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 个答案:

答案 0 :(得分: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                                                                  
▒                                                                     
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`�

答案 1 :(得分:0)

是的,这很奇怪,当我在python中查询数据库时,插入二进制数据后,它显示数据已成功插入(它将二进制数据喷射到屏幕上)。当我这样做:sqlite3 database_file.sqlite在命令行上“从图像中选择图像”,就在我看到'????'时。也许这就是'sqlite3'命令如何打印二进制数据?这似乎不对。我正在使用python 2.6.1