python - 将BLOB文件转换为图像MYSQL python
问题描述
我使用请求来获取图像的字节,然后尝试将其作为 BLOB 字段存储在 MySQL 表中;但是当我尝试取回 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
推荐阅读
- php - 如何使用 codeigniter 在邮件中设置动态标题?
- hyperledger-fabric - Hyperledger Fabric 中的对等通道创建失败
- react-native - 监视 this.state 以外的对象/字符串
- c++ - 具有多个可执行文件和依赖项的 Makefile
- javascript - D3 Persistent Path d 过渡期间的预期数字错误
- python - Python 机械化设置 cookie
- arrays - 为什么我的圈子显示为黑色?
- cordova - Cordova 找不到变量:NativeStorage
- php - 将货币选择器添加到 laravel
- reactjs - 在地图功能中渲染状态并添加一些样式反应js