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

Flask中Dropdown Box无法显示IBM DB获取的数据

解决Flask下拉框无法渲染IBM DB数据的问题

核心问题分析

你后端用cur.fetchall()默认返回的是元组列表(比如[(1, "扳手"), (2, "螺丝刀")]),但HTML模板里用的是字典的属性访问方式(row.id、row.tools),这就导致模板无法正确读取数据,所以下拉框为空。

解决方案(两种可选)

方案1:使用字典游标(推荐)

修改后端代码,创建游标时指定返回字典格式,这样fetchall()会直接返回字典列表,和你模板里的访问方式匹配:

@app.route("/unplanned_outage", methods=['GET', 'POST'])
def unplanned_outage():
    global conn
    ibm_db_conn = ibm_db.connect("DATABASE=bludb;HOSTNAME=hostname;PORT=1234;SECURITY=SSL;;UID=uid;PWD=pwd;", '', '')
    conn = ibm_db_dbi.Connection(ibm_db_conn)
    # 创建字典游标,返回字典格式的结果
    cur = conn.cursor(dictionary=True)
    select="select * from tools"
    cur.execute(select)
    tools = cur.fetchall()
    print("Query results:\n")
    print(tools,end="\n")
    cur.close()
    return render_template(r'page.html', tools=tools)

方案2:手动转换元组为字典

如果你的ibm_db_dbi版本不支持dictionary=True参数,可以手动把元组列表转换成字典列表:

@app.route("/unplanned_outage", methods=['GET', 'POST'])
def unplanned_outage():
    global conn
    ibm_db_conn = ibm_db.connect("DATABASE=bludb;HOSTNAME=hostname;PORT=1234;SECURITY=SSL;;UID=uid;PWD=pwd;", '', '')
    conn = ibm_db_dbi.Connection(ibm_db_conn)
    cur = conn.cursor()
    select="select * from tools"
    cur.execute(select)
    # 获取字段名,用于生成字典的key
    column_names = [desc[0] for desc in cur.description]
    # 转换元组为字典
    tools = [dict(zip(column_names, row)) for row in cur.fetchall()]
    print("Query results:\n")
    print(tools,end="\n")
    cur.close()
    return render_template(r'page.html', tools=tools)

额外检查项

  • 确认数据库表tools的字段名确实是id和tools,如果字段名不同(比如tool_id、tool_name),要对应修改模板里的row.id、row.tools为实际字段名。
  • 不需要添加JS代码,这是服务器端渲染的问题,Jinja2模板可以直接处理数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 02:32:03