如何在Python Flask网页应用中显示SQLite3数据库中的图片
解决Flask从SQLite BLOB显示图片的问题
核心问题分析
原代码存在几个关键问题:
Image函数未返回查询到的图片数据- 数据库连接关闭语句
conn3.close缺少括号,未实际执行 - SQLite的BLOB图片不能直接作为
img标签的src值,需要转换为浏览器可识别的格式
修正后的完整代码
app.py 修改版
from flask import Flask, render_template, request import sqlite3 import base64 app = Flask(__name__) def get_image_blob(search_name): # 连接数据库并查询对应名称的图片BLOB conn = sqlite3.connect('<你的数据库路径>') conn.row_factory = sqlite3.Row cursor = conn.cursor() # 模糊搜索:若需精确匹配,可将SQL改为"SELECT Image FROM Images WHERE Name = ?",参数传(search_name,) cursor.execute("SELECT Image FROM Images WHERE Name LIKE ?", (f"%{search_name}%",)) result = cursor.fetchone() conn.close() # 执行连接关闭操作 return result['Image'] if result else None @app.route('/display', methods = ["GET", "POST"]) def display(): image_data = None if request.method == "POST": search_name = request.form.get("search") blob = get_image_blob(search_name) if blob: # 将BLOB转换为base64编码的Data URI,供img标签直接调用 image_data = f"data:image/png;base64,{base64.b64encode(blob).decode('utf-8')}" return render_template('display.html', image=image_data)
display.html 修改版
<meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <form method="post"> <label for="search">区分大小写搜索</label> <br> <input type="text" name="search" required> <input type="submit" value="搜索"> <br><br> </form> {% if image %} <img src="{{ image }}" alt="搜索到的图片"> {% else %} <div id="picture">未找到图片</div> {% endif %}
关键改动说明
- 函数功能明确化:将原
Image函数重命名为get_image_blob,明确其获取图片BLOB的作用,并返回查询结果或None - 数据库连接修复:补全
conn.close()括号,确保数据库连接被正确关闭 - BLOB格式转换:把SQLite存储的PNG BLOB转换为base64编码的Data URI,让浏览器能直接识别并显示
- 模板逻辑简化:将原长度判断改为直接检查
image是否存在,逻辑更简洁准确
额外建议
- 替换数据库路径:将代码中的
<你的数据库路径>改为实际SQLite文件路径(如'images.db') - 搜索模式调整:若不需要模糊搜索,修改SQL语句和参数,实现精确匹配
- 异常处理补充:可添加数据库连接异常捕获,避免程序因连接失败直接崩溃
内容的提问来源于stack exchange,提问作者user20066355
相关产品推荐
相关产品推荐

