Flask路由配置正确,但Items Used表格数据无法显示的问题
问题排查与解决:Items Used表格无数据显示
针对账单页面Items Used表格无法显示数据的问题,可按以下步骤逐一排查修复:
1. 确认后端查询是否返回数据
先查看后端控制台的Items Used: [xxx]打印输出:
- 如果输出为空列表
[]:问题出在数据库查询逻辑或数据本身 - 如果输出有数据:问题出在前端模板的日期过滤逻辑
2. 修复日期格式/类型不匹配问题
SQLite的DATE类型存储为YYYY-MM-DD字符串,但后端查询返回的可能是datetime.date对象,与模板中字符串格式的current_date直接比较会失效。
解决方案A:在SQL查询中直接过滤当日数据
修改后端items_used的查询语句,在数据库层面完成日期过滤,避免类型不匹配:
cursor.execute(''' SELECT i.item_name, iu.quantity, iu.date_of_diagnosis, i.cost FROM items_used iu JOIN Items i ON iu.item_id = i.item_id WHERE iu.patient_id = ? AND DATE(iu.date_of_diagnosis) = DATE('now') ''', (patient_id,))
解决方案B:后端转换日期为字符串
将查询结果中的日期字段统一转为字符串格式:
items_used_raw = cursor.fetchall() items_used = [] for item in items_used_raw: item_dict = dict(item) # 将date对象转为与current_date一致的字符串格式 item_dict['date_of_diagnosis'] = item_dict['date_of_diagnosis'].strftime("%Y-%m-%d") items_used.append(item_dict)
3. 检查JOIN关联是否失效
如果items_used表中的item_id在Items表中无匹配记录,JOIN查询会过滤掉这些无效数据。可执行以下SQL验证:
SELECT iu.*, i.item_name FROM items_used iu LEFT JOIN Items i ON iu.item_id = i.item_id WHERE iu.patient_id = [你的patient_id];
若结果中item_name为NULL,说明Items表缺少对应item_id的记录,需补充数据或修复外键关联。
4. 调试模板过滤逻辑
临时移除模板中的日期判断条件,验证数据是否能显示:
{% for item in items_used %} <!-- 去掉日期判断,直接显示所有数据 --> <tr> <td>{{ item['item_name'] }}</td> <td>{{ item['quantity'] }}</td> </tr> {% endfor %}
如果数据显示,说明日期比较逻辑有问题,可添加调试输出查看格式差异:
{% for item in items_used %} <p>调试:{{ item['date_of_diagnosis'] }} | {{ current_date }}</p> {% endfor %}
5. 验证数据库中是否存在有效数据
直接查询数据库,确认是否有符合条件的记录:
SELECT * FROM items_used WHERE patient_id = [你的patient_id] AND date_of_diagnosis = 'YYYY-MM-DD'; -- 替换为当前日期
若结果为空,说明数据库中没有当日的物品使用记录,需补充数据。
内容的提问来源于stack exchange,提问作者PLAWD
相关产品推荐
相关产品推荐

