Python执行SQL并赋值变量时遇索引越界错误求助
问题原因与修正方案
错误核心
你的代码错误在于对fetchall()返回值的结构理解有误:
fetchall()返回的是行数据的列表,哪怕查询只返回1行,这个列表也只有1个元素,而这个元素才是包含2列值的元组/列表。- 你直接尝试取列表的第0和第1个元素,但列表里只有1个元素(甚至可能为空),自然触发
IndexError。 - 额外说明:
sqlqueryresult = list(sqlqueryresult)完全多余,fetchall()本身就返回列表类型。
修正方案
方案1:用fetchone()更高效(推荐)
既然明确查询只会返回1行,直接用fetchone()获取单行结果,它会返回包含2列值的元组(无结果时返回None):
sqlquery = """SELECT MIN(DATE) AS STARTDATE, MAX(DATE) AS ENDDATE FROM table""" cursor.execute(sqlquery) row = cursor.fetchone() if row is not None: STARTDATE, ENDDATE = row else: # 兜底处理无结果的极端情况(MIN/MAX查询通常不会返回空,但可以预留) STARTDATE = ENDDATE = None
方案2:如果坚持用fetchall()
先判断结果列表是否有数据,再取出第一行的列值:
sqlquery = """SELECT MIN(DATE) AS STARTDATE, MAX(DATE) AS ENDDATE FROM table""" cursor.execute(sqlquery) sqlqueryresult = cursor.fetchall() if sqlqueryresult: # 取出第一行,再解构赋值给两个变量 STARTDATE, ENDDATE = sqlqueryresult[0] else: STARTDATE = ENDDATE = None
内容的提问来源于stack exchange,提问作者K. Am
相关产品推荐
相关产品推荐

