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

使用Flask+sqlite3开发Web应用:查询结果无属性名显示问题

解决SQLite查询结果不显示列名的问题

一、SQLite命令行中显示列名

如果是在SQLite命令行工具中查询时看不到列名,有两种快速解决方式:

  • 启动命令行时加上-header参数:
    sqlite3 -header your_database.db
    
  • 已经进入shell后,执行以下命令开启列名显示并优化输出格式:
    .header on
    .mode column
    
    之后再执行SELECT * FROM registrants;,就会得到带列名的规整表格输出。

二、Flask代码中获取带列名的查询结果

在Flask应用里用Python的sqlite3模块查询时,默认返回的是元组列表,没有列名映射。可以通过两种方式获取带列名的结构化结果:

方法1:手动组合列名与结果

通过游标对象的description属性提取列名,再与查询结果组合成字典列表:

import sqlite3
from flask import Flask, render_template

app = Flask(__name__)

@app.route('/registrants')
def list_registrants():
    conn = sqlite3.connect('your_database.db')
    cur = conn.cursor()
    cur.execute("SELECT * FROM registrants")
    
    # 提取所有列名
    column_names = [col[0] for col in cur.description]
    # 将每行结果与列名绑定成字典
    registrants = [dict(zip(column_names, row)) for row in cur.fetchall()]
    
    conn.close()
    return render_template('registrants.html', registrants=registrants)

方法2:使用sqlite3.Row对象

设置连接的row_factory为sqlite3.Row,让查询返回的行对象支持通过列名访问:

import sqlite3
from flask import Flask, render_template

app = Flask(__name__)

@app.route('/registrants')
def list_registrants():
    conn = sqlite3.connect('your_database.db')
    # 设置行工厂,让结果支持列名访问
    conn.row_factory = sqlite3.Row
    cur = conn.cursor()
    cur.execute("SELECT * FROM registrants")
    
    # 直接获取行对象列表,可转成字典
    registrants = [dict(row) for row in cur.fetchall()]
    
    conn.close()
    return render_template('registrants.html', registrants=registrants)

三、模板中渲染规整表格

在Jinja2模板registrants.html中,可以直接遍历带列名的字典,渲染成结构化表格:

<table border="1">
    <thead>
        <tr>
            <th>ID</th>
            <th>姓名</th>
            <th>用户名</th>
            <th>积分</th>
        </tr>
    </thead>
    <tbody>
        {% for user in registrants %}
        <tr>
            <td>{{ user.id }}</td>
            <td>{{ user.name }}</td>
            <td>{{ user.username }}</td>
            <td>{{ user.points }}</td>
        </tr>
        {% endfor %}
    </tbody>
</table>

内容的提问来源于stack exchange,提问作者Vasanthan S R

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 17:50:44