Flask Python应用中无法提取SQLite数据表指定行指定列的单个数据
Flask Python应用中无法提取SQLite数据表指定行指定列的单个数据
我来帮你梳理下问题所在,以及对应的解决办法~
问题根源
你现在的代码里用了TDS.query.all(),这个方法会返回数据表中所有行的对象列表。之后你循环遍历这个列表时,每次的td都是单独一行的数据对象,td.Income_under_salary就是这一行对应列的单个整数值。
你看到的9 415244 38024其实是三次循环分别打印的结果(每行的该列值),而不是一个包含三个元素的列表。另外result[0]的写法本身就有问题——因为result是整数类型,根本不支持索引访问,只是可能你实际运行的代码里没写[0],直接打印了result才得到这三个值。
至于HTML模板里的报错,是因为你把单个整数result传给了模板,却用for循环去遍历它,整数当然不是可迭代对象,所以会抛出TypeError。
解决方案
1. 只获取第一行的指定列值
如果你明确要拿第一行的Income_under_salary(也就是你想要的9),不需要用all(),直接用first()方法获取单个行对象:
# 获取数据表的第一行数据 first_row = TDS.query.first() if first_row: # 先判断是否存在数据,避免空值报错 target_value = first_row.Income_under_salary print(target_value) # 这里会输出9
然后把target_value传给模板,直接渲染即可,不需要循环:
<div>{{ target_value }}</div>
2. 按条件获取特定行
如果不是要第一行,而是要根据某个条件(比如id=1)获取指定行,用filter_by配合first():
target_row = TDS.query.filter_by(id=1).first() if target_row: target_value = target_row.Income_under_salary
3. 遍历所有行并在模板展示
如果你确实需要展示所有行的该列数据,后端要把所有行的列表传给模板,然后在模板里遍历每一行再取对应列:
# 后端:获取所有行数据 all_tds = TDS.query.all() # 把列表传给模板,这里假设模板名为your_page.html return render_template('your_page.html', tds_list=all_tds)
<!-- 模板:遍历每个行对象,取出对应列的值 --> {% for row in tds_list %} <div>{{ row.Income_under_salary }}</div> {% endfor %}
这样就能正确渲染每一行的Income_under_salary值,不会再出现迭代整数的错误啦。
备注:内容来源于stack exchange,提问作者DBV
相关产品推荐
相关产品推荐

