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

Flask对接SQLite查询时出现TypeError: 'NoneType' object is not subscriptable错误求助

错误触发原因

报错的触发点在model.py文件的color = cursor.fetchone()[0]行:
当你的SQL查询没有匹配到任何记录时,cursor.fetchone()会返回None,直接对None执行取下标[0]的操作,就会抛出TypeError: 'NoneType' object is not subscriptable错误。
查询无结果的常见原因有两个:

  • flask.db的users表中没有username为Tom的记录,或对应记录的color字段为空
  • 直接用format拼接SQL的写法存在风险,若参数携带特殊字符会导致查询逻辑异常,本次你传参为固定值Tom,基本可以排除该原因

修复方案

  1. 优化show_color函数逻辑,增加查询结果校验,同时改用参数化查询避免SQL注入风险,修改后代码如下:
import sqlite3

def show_color(username):
    connection = sqlite3.connect("flask.db", check_same_thread=False)
    cursor = connection.cursor()
    # 参数化查询,占位符?对应后面传入的参数元组
    cursor.execute("SELECT color FROM users WHERE username = ? ORDER BY pk DESC;", (username,))
    query_res = cursor.fetchone()
    if query_res:
        color = query_res[0]
        message = f"{username}的最喜欢的颜色是{color}。"
    else:
        message = f"未查询到用户{username}的配色记录"
    cursor.close()
    connection.close()
    return message
  1. 确认数据库内存在有效数据
    你可以在SQLite控制台执行查询语句验证:
    SELECT * FROM users WHERE username = 'Tom';
    如果没有返回结果,执行插入语句补充对应记录即可,示例:
    INSERT INTO users (username, color) VALUES ('Tom', '红色');
  2. 冗余代码清理
    你原有代码中connection.commit()是增删改操作才需要调用的事务提交语句,纯查询操作不需要执行该行,可直接删除。

内容的提问来源于stack exchange,提问作者micheal santner

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 04:03:02