数据库查询后修改数据报错:'tuple' object does not support item assignment
问题分析与解决
核心问题
数据库查询返回的fetchall()结果是元组的列表,其中每一行数据都是不可变的元组。你虽然把整个结果转成了列表,但列表里的每个元素依然是元组,而元组不支持元素赋值,所以执行my_list[y][0] = sip[0]时触发tuple object does not support item assignment错误。
额外问题
你的SQL语句末尾多了一个单引号:"select desc ,city,datetime,loc from mytable'",这会导致SQL执行失败,需要先去掉多余的单引号。
修正后的代码方案
方案1:将每行元组转为列表再修改
command = "select desc, city, datetime, loc from mytable" cursor.execute(command) result = cursor.fetchall() # 把每行元组转为可变的列表 my_list = [list(row) for row in result] for y in range(len(my_list)): sip = my_list[y][0].split("/") my_list[y][0] = sip[0] # 如需转回元组,执行下面的语句 myary = tuple(my_list)
方案2:用生成器直接生成修改后的元组(更简洁)
command = "select desc, city, datetime, loc from mytable" cursor.execute(command) result = cursor.fetchall() # 直接生成修改后的元组集合 myary = tuple( (row[0].split("/")[0],) + row[1:] for row in result )
原代码冗余点说明
你原来的循环for x in result: myary.append(result[i]); i+=1完全没必要,直接myary = result或者myary = list(result)就能拿到结果集合,不需要手动循环追加。
内容的提问来源于stack exchange,提问作者andrewarnier
相关产品推荐
相关产品推荐

