【问题标题】:Inserting and retrieving images into mysql through python通过python将图像插入和检索到mysql中
【发布时间】:2022-03-03 11:44:57
【问题描述】:

我使用此代码将图像插入 mysql 数据库并取回图像。 这段代码完美运行,没有错误,但问题是即使在将图像插入 img 表后,当我在 mysql 命令行中执行命令 select * from img ; 时,它也没有显示任何记录。

在数据库中创建的表;

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

【问题讨论】:

标签: python mysql python-imaging-library


【解决方案1】:
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()

这段代码运行良好

【讨论】:

  • 请清理代码。比如 from PIL import Image 和 import PIL.Image。
【解决方案2】:
import mysql.connector
import base64
import io

import PIL.Image
with open('lemonyellow_logo.jpg', 'rb') as f:
    photo = f.read()
encodestring = base64.b64encode(photo)
db= mysql.connector.connect(user="root",password="lyncup",host="localhost",database="demo")
mycursor=db.cursor()
sql = "insert into sample values(%s)"
mycursor.execute(sql,(encodestring,))
db.commit()
sql1="select * from sample"
mycursor.execute(sql1)
data = mycursor.fetchall()
data1=base64.b64decode(data[0][0])
file_like=io.BytesIO(data1)
img=PIL.Image.open(file_like)
img.show()
db.close()

【讨论】:

  • 在答案中添加一点解释总是更好
  • 嗨达福斯!我觉得你好吗,我们只能为加密数据类型存储文件或图像。首先我们必须读取二进制代码的文件。所以使用 import base64 和 open('.jpg', 'rb') ,然后加密 base64.b64encode(photo),然后存储到 mysql。如果你想使用下面的“从样本中选择 *”的代码显示来自 mysql 的图像,传入的数据是加密的,所以我们解密 base64.b64decode(data[0][0])。然后转换字节码。因为它来自字符串。然后我们像文件 PIL.Image.open(file_like) 一样打开图像,PIL 表示枕头,这个模块使用将图像存储到 mysql 中。然后显示。谢谢
猜你喜欢
  • 2011-07-11
  • 1970-01-01
  • 2015-05-14
  • 2020-02-21
  • 2012-02-06
  • 2023-03-09
  • 2018-06-08
  • 2013-04-18
  • 1970-01-01
相关资源
最近更新 更多