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

Python操作MySQL循环触发TypeError: 'NoneType'对象不可下标访问

问题分析与解决方案

你的问题核心出在UPDATE语句的WHERE条件上:

qry2 = "UPDATE data SET parsed = 1 WHERE id = id"

这个条件id = id会匹配表中所有行(因为每一行的id都等于自身),第一次循环执行后,所有parsed=0的数据都会被批量改成parsed=1。第二次循环执行SELECT查询时,已经找不到符合parsed=0的行,fetchone()返回None,执行id = result_qry[0]就触发了TypeError。

注释掉UPDATE语句后,数据状态不会被修改,所以循环能持续查到结果;而PHPMyAdmin中单独执行SELECT有结果,是因为你没在那里执行那个错误的UPDATE语句。


修正后的代码

需要做两处关键调整:

  1. 修复UPDATE的WHERE条件,用参数化查询传入实际的id值,同时避免SQL注入风险
  2. 增加判空逻辑,无数据可处理时退出循环
cursor = db.cursor()

while True:
    qry = "SELECT id FROM data WHERE parsed = 0 ORDER BY RAND() LIMIT 1"
    cursor.execute(qry)
    result_qry = cursor.fetchone()
    
    # 没有可处理的数据时退出循环
    if not result_qry:
        break
        
    id = result_qry[0]

    # Some stuff

    # 使用参数化查询传入目标id
    qry2 = "UPDATE data SET parsed = 1 WHERE id = %s"
    cursor.execute(qry2, (id,))
    db.commit()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 19:22:43