将BLOB文件转换为图像MYSQL python



我使用请求来获取图像的字节,然后尝试将其存储在MySQL表中作为BLOB字段;但是当我试图得到blob文件回来,并使用枕头来获得一个图像,它抛出和错误说一个字节类对象是必需的,而不是一个元组。

我知道字节是正确的,因为当我尝试先读取图像而不将其放入SQL表时,它工作得很好。

import mysql.connector # imports sql functionality
import requests
from PIL import Image
import io
r =requests.get("https://www.amazon.co.uk/images/I/81VoHkKTTBL._AC_UY327_FMwebp_QL65_.jpg")
db = mysql.connector.Connect(
host="localhost",
user="user1",
passwd="paswd",
database="temporary_database",
)
cursor = db.cursor()
imag = r.content
cursor.execute("select img from test where Price_of_item = 21")
for x in cursor:
img = x
image_data = img
image = Image.open(io.BytesIO(image_data))
image.show()

当字节作为BLOB传递给sql并且不起作用时,此代码

错误图像

import mysql.connector # imports sql functionality
import requests
from PIL import Image
import io
r =requests.get("https://www.amazon.co.uk/images/I/81VoHkKTTBL._AC_UY327_FMwebp_QL65_.jpg")
img = r.content
image_data = img
image = Image.open(io.BytesIO(image_data))
image.show()

没有传递给SQL表,并且工作得很好

问题出在这部分代码上:

for x in cursor:
img = x

游标中的每一行x都是一个元组,而不是单个值。

如果查询从表中选择了多个列,游标将生成一个元组,该元组的每个元素包含查询中的每个列的一个元素。如果只选择一列,情况也没有什么不同。在本例中,游标生成只包含一个元素的元组。

有几种可能的方法来处理这个问题。首先,您可以选择元组中的第一个元素:

for row in cursor:
img = row[0]

或者在循环体中使用解构赋值:

for row in cursor:
(img,) = row

或立即解构游标输出的内容:

for (x,) in cursor:
img = x

最新更新