You need to enable JavaScript to run this app. Flask /search路由加载database.db数据渲染HTML页时报内部服务器错误求解决
优惠活动
大模型
产品
解决方案
定价
更多

Flask /search路由加载database.db数据渲染HTML页时报内部服务器错误求解决

/search接口内部服务器错误排查与修复方案

核心报错根因

  • 递归死循环(最直接触发500的原因):后端代码中模板传参写为output=search(),路由函数search()在执行过程中会无终止地自我调用,快速触发Python递归深度上限,直接抛出运行时错误。
  • 执行路径逻辑错误:手动编写的con.close()语句放在return语句之后,永远不会被执行;且with sql.connect(...)上下文管理器本身会在代码块退出时自动完成连接提交、数据库资源释放,该手动关闭逻辑本身完全冗余。
  • SQL语句潜在语法风险:查询时直接使用未转义的表名list,该名称属于通用保留标识,部分数据库解析器会将其识别为语法关键字,直接触发查询失败。
  • 前后端数据传值不匹配:未做格式化的原始查询结果直接传入模板,前端只能展示难读的原始元组字符串,无法清晰呈现结构化数据。

修正后的后端实现

import sqlite3 as sql
from flask import Flask, render_template

app = Flask(__name__)

@app.route('/search')
def search():
    # 确认database.db文件路径与当前Flask应用的工作目录匹配
    with sql.connect("database.db") as con:
        cur = con.cursor()
        # 表名加转义反引号,规避关键字冲突
        cur.execute("SELECT * FROM `list`")
        query_result = cur.fetchall()
    
    # 直接将查询得到的结果传入模板,删除递归调用自身的错误逻辑
    return render_template("search.html", output=query_result)

前端模板适配优化

修正原模板中多余的闭合标签,增加循环渲染逻辑,提升数据展示可读性:

{% extends "headers/header.html" %}
{% block body %}
<h1>Results</h1>
{% if output %}
    {% for row in output %}
    <div class="result-item">
        <p>字段1:{{ row[0] }}</p>
        <p>字段2:{{ row[1] }}</p>
        <p>字段3:{{ row[2] }}</p>
        <p>字段4:{{ row[3] }}</p>
        <p>字段5:{{ row[4] }}</p>
    </div>
    {% endfor %}
{% else %}
    <p>暂无查询结果</p>
{% endif %}
</main>
</body>
{% endblock %}

调试提示:如果修正后仍出现数据库相关报错,可在连接代码段打印数据库文件的绝对路径,确认应用启动时的工作目录能正确定位到database.db文件,避免路径匹配错误。

内容的提问来源于stack exchange,提问作者t.gf

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.30 05:54:08