Python库存控制系统查询数据库时触发IndexError问题求助
解决Python库存系统中MariaDB查询的IndexError问题
问题原因
当textProduto为空时,数据库查询返回空结果集,cursor.fetchall()得到的是空列表[],此时尝试访问[0][0]必然触发IndexError——空列表没有第0个元素。而输入有效商品名称时,查询能匹配到数据,fetchall()返回包含至少一个元组的列表,因此[0][0]可以正常取值。
解决方案
方案1:先检查查询结果是否为空
在访问结果前先判断列表是否有内容:
cursor.execute("SELECT COUNT(*) FROM produtos WHERE nome = %s", (textProduto,)) results = cursor.fetchall() if results: count = results[0][0] # 后续判断逻辑,比如count > 0表示商品已存在 else: # 处理空输入或无匹配的情况 print("请输入有效的商品名称")
方案2:用fetchone()替代fetchall()
如果只需获取单个值,fetchone()更高效,它会返回单个元组或None:
cursor.execute("SELECT COUNT(*) FROM produtos WHERE nome = %s", (textProduto,)) row = cursor.fetchone() if row is not None: count = row[0] if count > 0: print("商品已存在") else: print("商品不存在") else: print("查询无结果,请检查输入")
方案3:提前校验输入合法性
在执行查询前先过滤空输入,避免无效查询:
if not textProduto.strip(): print("商品名称不能为空,请重新输入") else: cursor.execute("SELECT COUNT(*) FROM produtos WHERE nome = %s", (textProduto,)) count = cursor.fetchone()[0] # 后续业务逻辑
内容的提问来源于stack exchange,提问作者Vet
相关产品推荐
相关产品推荐

