Python/Flask新手问题:如何格式化SQLite数据库取出的积分值为整数显示?
实现Points字段整数展示的三种可选方案
两种处理位置(查询时/渲染前)都可以实现需求,你可以根据自己的业务场景选择:
方案1:SQL查询阶段直接转换(推荐全场景用整数的情况)
直接在查询语句中用SQLite自带的CAST函数将浮点型的Points字段转为整数,无需修改后续任何代码:
修改app.py中index路由的查询语句即可:
@app.route('/') def index(): conn = get_db_connection() # 仅修改这一行的查询语句,用CAST转换字段类型 rows = conn.execute('SELECT Name, CAST(Points AS INTEGER) AS Points, Active FROM playerslist').fetchall() conn.close() return render_template('index.html', rows=rows)
优势是从数据查询层统一解决类型问题,后续所有用到该查询结果的地方拿到的都是整数格式,不需要重复处理。
方案2:后端渲染前转换(推荐不同页面需要不同格式的情况)
如果你只需要在当前路由的返回结果中用整数,其他接口还是需要保留浮点格式,可以在拿到查询结果后、传入模板前做字段转换:
@app.route('/') def index(): conn = get_db_connection() rows = conn.execute('SELECT * FROM playerslist').fetchall() conn.close() # 处理每行的Points字段 processed_rows = [] for row in rows: row_dict = dict(row) row_dict['Points'] = int(row_dict['Points']) processed_rows.append(row_dict) return render_template('index.html', rows=processed_rows)
方案3:Jinja2模板渲染阶段转换(推荐仅当前页面需要整数展示的情况)
如果你不需要修改后端代码,只需要在当前页面展示时去掉.0后缀,直接修改模板代码即可,用Jinja2自带的int过滤器做转换:
修改index.html中Points字段的渲染代码:
<span class="badge badge-primary">{{ row['Points']|int }}</span>
这个方案改动最小,只需要改一行代码,适合仅前端展示需要整数、后端逻辑不需要修改的场景。
额外优化建议:如果你的Points字段业务上本身就是整数,也可以修改你之前pandas导入Excel的脚本,将导入SQLite时的Points字段类型指定为INTEGER,从根源上避免浮点存储的问题。
内容的提问来源于stack exchange,提问作者fk1
相关产品推荐
相关产品推荐

