Flask中HTML仅展示SQLite最后一条记录而非全表数据问题求助
问题原因
- 核心错误是循环缩进逻辑错误:原代码中遍历字段的
for x in row和遍历行的for row in cur是平级关系,只有当遍历完全部行、row变量最终存储表最后一条记录后,才会执行字段遍历逻辑,前面生成的所有<tr>标签都没有对应<td>内容,最终仅能渲染最后一行数据。 - 次要问题:数据库查询逻辑写在Flask应用初始化阶段,仅服务启动时执行一次查询,后续数据库更新不会同步到页面;同时全局声明SQLite连接存在线程安全隐患。
- HTML结构缺失:原代码没有拼接
</table>闭合标签,属于不合法的HTML结构。
修复方案
调整后的可运行代码如下:
import sqlite3 from flask import Flask app = Flask(__name__) @app.route('/') def main(): # 将数据库操作移到路由内部,每次请求重新查询最新数据 connection = sqlite3.connect('employee.db') cur = connection.cursor() cur.execute('SELECT * FROM employee;') s = "<table style='border:2px solid black'>" # 修正缩进:字段遍历放在行遍历内部 for row in cur: s += "<tr>" for x in row: s += "<td>" + str(x) + "</td>" s += "</tr>" # 补全table闭合标签 s += "</table>" cur.close() connection.close() return "<html><body>" + s + "</body></html>" if __name__ == "__main__": app.run()
如果需要更规范的实现,还可以改用Flask的render_template模板能力渲染HTML,不要在Python代码中硬拼接HTML字符串,后续维护更方便。
内容的提问来源于stack exchange,提问作者Asking
相关产品推荐
相关产品推荐

