Python循环迭代ID更新SQL时报'int不可迭代'错误求助
问题解决
错误原因
你把逗号分隔的ID字符串(比如"18,17,83,14")直接转成了整数int,而整数是不可迭代的,所以for item in items会抛出TypeError。而且实际上int("18,17,83,14")本身就会报错,因为字符串里包含逗号,无法直接转成整数。
修正步骤
- 对逗号分隔的ID字符串进行分割,得到单个ID的字符串列表
- 遍历列表,将每个ID字符串转成整数
- 把数据库提交操作
con.commit()移到循环外,减少数据库交互次数,提升效率
修正后的代码
for row in range(self.tableLinhaNova.rowCount()): _item = self.tableLinhaNova.item(row, column) if _item: items1 = self.tableLinhaNova.item(row, column).text() # 按逗号分割字符串,得到每个ID的字符串列表 id_str_list = items1.split(',') # 遍历每个ID字符串,转成整数后执行更新 for id_str in id_str_list: # 去除可能的空格(比如ID之间有空格的情况) id_str = id_str.strip() if id_str: # 避免空字符串转int报错 item = int(id_str) cursor.execute('''UPDATE "Teste" SET "Estado"= 2 WHERE "IdTeste" = %s''', [item]) # 所有更新执行完后再提交 con.commit()
额外说明
split(',')会把"18,17,83,14"拆成["18", "17", "83", "14"]strip()用来处理ID之间可能存在的空格(比如"18, 17, 83"这种情况)- 增加
if id_str:判断是为了防止分割后出现空字符串(比如字符串首尾有逗号的情况,比如",18,17,")导致转int报错
内容的提问来源于stack exchange,提问作者ANDRE SA
相关产品推荐
相关产品推荐

