我正在尝试在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的图像中选择图像' 我得到'????'打印到控制台。谁知道我做错了什么?
答案 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