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

Flask-Sqlite问题:下拉菜单无法显示数据库中的用户名列表

问题分析与修复方案

错误根源

从控制台输出的[('User_1',), ('User_2',), ('User_3',), ('User_4',)]可知,team_members中的每个元素是单元素元组,仅索引0位置存储了用户名。但你在模板中使用{{t[1]}}调用不存在的索引,导致下拉菜单无显示内容。

两种修复方式

方式一:修改前端模板

直接使用元组中唯一存在的索引0作为选项显示文本:

<div class="dropdown">
<p style="font-family:verdana">
    Choose a team member:<SELECT name="team_members_usernames" style="font-family:verdana">
    {% for t in team_members %}
        <OPTION value={{t[0]}}>{{t[0]}}</OPTION>
    {% endfor %}
    </SELECT>
    </p>
</div> 

方式二:修改后端数据格式

将查询结果转换为纯字符串列表,简化模板逻辑:

@app.route('/dashboard')
def dashboard():
      cur = get_db().cursor()
      team_members = cur.execute("SELECT username FROM user").fetchall()
      # 提取元组中的用户名,转为字符串列表
      team_members = [member[0] for member in team_members]
      print(team_members)
      return render_template('dashboard.html', team_members=team_members)

对应的模板代码可简化为:

<div class="dropdown">
<p style="font-family:verdana">
    Choose a team member:<SELECT name="team_members_usernames" style="font-family:verdana">
    {% for username in team_members %}
        <OPTION value={{username}}>{{username}}</OPTION>
    {% endfor %}
    </SELECT>
    </p>
</div> 

额外提示

  • 若后续切换为SQLAlchemy ORM,可通过User.query.with_entities(User.username).all()查询,同样需注意提取单字段数据。
  • 建议在Flask中配置teardown_appcontext钩子,自动关闭数据库连接,避免资源泄漏:
@app.teardown_appcontext
def close_connection(exception):
    db = getattr(g, '_database', None)
    if db is not None:
        db.close()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 13:35:22