2014-03-03 147 views
3

我用這個代碼插入圖像到MySQL數據庫並檢索圖像。 此代碼完美無誤地工作,但問題是即使在將圖像插入到img表後,當我在mysql命令行中執行命令select * from img ;時,它不顯示任何記錄。通過python插入和檢索圖像到mysql

在數據庫中創建的表;
create table img(images blob not null);

import mysql.connector 
import sys 
from PIL import Image 
import base64 
import cStringIO 
import PIL.Image 

db = mysql.connector.connect(user='root', password='abhi', 
           host='localhost', 
           database='cbir') 

#image = Image.open('C:\Users\Abhi\Desktop\cbir-p\images.jpg') 
with open("C:\Users\Abhi\Desktop\cbir-p\images.jpg", "rb") as image_file: 
    encoded_string = base64.b64encode(image_file.read()) 

#blob_value = open('C:\Users\Abhi\Desktop\cbir-p\images.jpg', 'rb').read() 
sql = 'INSERT INTO img(images) VALUES(%s)'  
args = (encoded_string,) 
cursor=db.cursor() 
cursor.execute(sql,args) 
sql1='select * from img' 
cursor.execute(sql1) 
data=cursor.fetchall() 
#print type(data[0][0]) 
data1=base64.b64decode(data[0][0]) 
file_like=cStringIO.StringIO(data1) 
img=PIL.Image.open(file_like) 
img.show() 

db.close() 
+0

在[手冊](http://dev.mysql.com/doc/refman/5.6/en/blob.html)我發現有用於二進制字符串(BLOB)的數據類型和用於字符串(TEXT)的數據類型。爲什麼要將二進制字符串(圖像)轉換爲字符串(base64)並將其保存爲二進制字符串(BLOB)? – miracle173

+0

可能重複[如何插入/檢索存儲爲一個BLOB文件在MySQL數據庫使用Python](http://stackoverflow.com/questions/1294385/how-to-insert-retrieve-a-file-stored- as-a-blob-in-a-mysql-db-using-python) – Mikpa

+0

謝謝miracle173 – user3320033

回答

4
import mysql.connector 
import sys 
from PIL import Image 
import base64 
import cStringIO 
import PIL.Image 

db = mysql.connector.connect(user='root', password='abhi', 
           host='localhost', 
           database='cbir') 

image = Image.open('C:\Users\Abhi\Desktop\cbir-p\images.jpg') 
blob_value = open('C:\Users\Abhi\Desktop\cbir-p\images.jpg', 'rb').read() 
sql = 'INSERT INTO img(images) VALUES(%s)'  
args = (blob_value,) 
cursor=db.cursor() 
cursor.execute(sql,args) 
sql1='select * from img' 
db.commit() 
cursor.execute(sql1) 
data=cursor.fetchall() 
print type(data[0][0]) 
file_like=cStringIO.StringIO(data[0][0]) 
img=PIL.Image.open(file_like) 
img.show() 

db.close() 

此代碼工作正常

+1

請清理代碼。例如,從PIL導入Image並導入PIL.Image。 – RockTheStar