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语句。
修正后的代码
需要做两处关键调整:
- 修复UPDATE的WHERE条件,用参数化查询传入实际的id值,同时避免SQL注入风险
- 增加判空逻辑,无数据可处理时退出循环
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
相关产品推荐
相关产品推荐

