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

Flask+MySQL开发词典提交搜索返回500错误该如何解决

错误原因
  • 表单提交路径不匹配:HTML表单未指定action属性,提交时默认请求当前页面也就是/路由,但/路由对应的search函数只处理了GET请求,没有对POST请求做任何处理、也没有返回响应,这是报错的直接原因。
  • 路由逻辑未触发:你编写了/word路由的POST处理逻辑,但表单没有提交到这个地址,导致对应逻辑完全没有被调用。
  • 其他潜在问题:
    • SQL语法错误:SELECT English_Translation * FROM wordentry2 语法不合法,不能同时指定单个字段和*全量通配符
    • 存在SQL注入风险:直接拼接用户输入到SQL语句中,极易被恶意注入攻击
    • 未处理空查询结果:如果搜索没有匹配结果,直接取output[0]会引发索引越界错误
    • 游标返回格式不匹配:默认MySQL游标返回元组类型,你按字典格式取值output[0]['urdu_word']会报错,需要指定字典游标
解决方案
  1. 修正表单提交路径,给HTML的form标签添加action属性,指定提交到/word路由:
<form method="POST" action="/word">
  1. 修正/word路由的逻辑,补全边界处理:
# 根据你使用的MySQL连接库导入对应字典游标,以下为flask-mysqldb的示例
import MySQLdb.cursors

@app.route('/word',methods = ['POST','GET'])
def word():
    # 处理GET请求,直接跳回首页避免直接访问报错
    if request.method == 'GET':
        return redirect('/')
    if request.method=='POST':
        input1 = request.form['input1']
        # 初始化字典游标,支持按字段名取值
        cur = mysql.connection.cursor(MySQLdb.cursors.DictCursor)
        # 修正SQL语法,使用参数化查询避免注入风险
        cur.execute('''SELECT urdu_word, English_Translation FROM wordentry2 WHERE English_Translation LIKE %s''', (f'%{input1}%',))
        output = cur.fetchall()
        # 处理无匹配结果的场景
        if not output:
            return render_template('word.html', error="未找到匹配的词汇")
        return render_template ('word.html', urduword = output[0]['urdu_word'], englishword = output[0]['English_Translation'])

内容的提问来源于stack exchange,提问作者Ahmad Dada

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 22:06:07