You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中使用SQLite3存储图片后查询显示二进制而非图片怎么解决?

解决SQLite读取图片后无法显示的问题

嘿,你现在看到的输出是图片的二进制字节数据,这很正常——因为你只是把数据库里的字节直接打印出来了,并没有把它转换成可显示的图片格式😉。下面给你两种简单的解决方法:

方法1:把二进制数据写回文件再打开

这种方法是把从数据库读取到的字节重新写入一个图片文件,然后用系统默认的图片查看器打开它:

import sqlite3
import os  # 用来打开文件

conn = sqlite3.connect('Pictures.db')
cur = conn.cursor()

# 注意:如果已经运行过一次创建表和插入数据的代码,建议注释掉下面两行避免报错
# cur.execute('create table pictures(thebin blob)')
# with open('logo4.png', 'rb') as file:
#     cur.execute('insert into pictures(thebin) values (?)', [sqlite3.Binary(file.read())])
# conn.commit()  # 插入数据后必须提交才能保存到数据库

# 读取图片二进制数据
cur.execute('select thebin from pictures')
img_data = cur.fetchone()[0]  # fetchone返回元组,取第一个元素就是图片字节

# 将字节写入新的图片文件
with open('recovered_logo.png', 'wb') as f:
    f.write(img_data)

# 调用系统默认程序打开图片
os.startfile('recovered_logo.png')  # Windows系统适用;macOS可替换为 subprocess.run(['open', 'recovered_logo.png'])

conn.close()

方法2:用Pillow库直接在内存中显示图片

如果你不想生成中间文件,可以用Pillow(Python常用图像处理库)直接加载内存中的二进制数据并显示:

首先安装Pillow:

pip install pillow

然后修改代码:

import sqlite3
from PIL import Image
from io import BytesIO

conn = sqlite3.connect('Pictures.db')
cur = conn.cursor()

# 读取图片数据
cur.execute('select thebin from pictures')
img_data = cur.fetchone()[0]

# 在内存中加载图片并调用系统查看器显示
img = Image.open(BytesIO(img_data))
img.show()

conn.close()

小提醒

  • 重复运行插入数据的代码会导致数据库里存入多张相同图片,读取时fetchone()只会取第一条,记得按需注释插入逻辑。
  • conn.commit()一定要放在插入数据之后,否则数据不会真正保存到数据库中。

内容的提问来源于stack exchange,提问作者ronak patel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:54:14