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

FastAPI使用模板时数据不显示问题及结果类型疑问

问题解决:FastAPI模板不显示SQLite数据及查询结果格式问题

一、模板不显示数据的修复

你的模板存在三个关键错误,导致数据无法渲染:

  1. 上下文变量名不匹配:在TemplateResponse中传递的变量是"Stocks": rows,但模板里遍历的是rows,两者名称不一致
  2. 循环变量引用错误:循环内写的{{ rows.id }},应该用循环变量row而非原列表rows,即{{ row.id_ticker }}(注意字段名要和SQL查询的列名一致)
  3. HTML标签拼写错误:<tile>是笔误,应改为<title>

修正后的index.html示例:

<html>
    <head>
        <title>Stocks</title>
    </head>
    <body>
        <h1>Stocks</h1>
        <table border="1">
            {% for row in Stocks %}
                <tr>
                    <td>{{ row.id_ticker }}</td>
                    <td>{{ row.tx_ticker_symbol }}</td>
                    <td>{{ row.tx_ticker_code }}</td>
                    <td>{{ row.tx_ticker_name }}</td>
                    <td>{{ row.tx_ticker_fullname }}</td>
                </tr>
            {% endfor %}
        </table>
    </body>
</html>

额外提示:当前你在FastAPI启动时就执行了数据库查询,后续数据库更新后页面不会自动刷新最新数据。如果需要每次请求都获取最新数据,应把查询逻辑移到路由函数内:

@app.get("/")
def index(request: Request):
    idb = sqle.db_engine(tg_db_name, data_path)
    idb.connect()
    rows = idb.ticker_list()
    idb.close_db()
    return templates.TemplateResponse("index.html", {"request": request, "Stocks": rows})

二、查询返回列表而非字典的原因及解决

SQLite默认的游标执行fetchall()时,返回的是元组列表,每个元组对应一行数据,因此你看到的类型是list。如果需要返回字典格式的结果,有两种常用方法:

方法1:设置游标为字典格式

在数据库连接后,设置row_factory为sqlite3.Row,这样查询结果会返回Row对象列表,既可以像字典一样通过键名访问字段,也支持索引访问:

import sqlite3

# 在你的db_engine类的connect方法中添加:
self.conn = sqlite3.connect(你的数据库路径)
self.conn.row_factory = sqlite3.Row  # 启用字典式行对象
self.cursor = self.conn.cursor()

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

查询后结合列名,把每个元组转换成字典:

mySql = ('''SELECT id_ticker, tx_ticker_symbol, tx_ticker_code, 
           tx_ticker_name, tx_ticker_fullname 
          FROM Ticker''')
self.cursor.execute(mySql)
# 获取查询的列名
columns = [desc[0] for desc in self.cursor.description]
# 将元组列表转为字典列表
rows = [dict(zip(columns, row)) for row in self.cursor.fetchall()]
return rows

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 17:01:22