Python MySQL迁移后遇TypeError: 'NoneType'对象不可迭代问题求助
解决SQLite迁移MySQL后查询结果遍历报错的问题
问题核心是SQLite与MySQL的Python驱动对查询结果的处理逻辑存在差异:
- SQLite的游标执行
execute()后,自身就是可迭代的结果集,直接遍历就能获取每行数据 - 但MySQL的Python驱动(如mysql-connector-python、PyMySQL)中,
execute()仅完成查询执行,不会直接返回可迭代结果,必须主动调用fetch方法获取数据
修改代码即可解决问题,调整查询结果的获取方式:
def select_list(self): self.list_cli.delete(*self.lista_cli.get_children()) self.conecting_bd() # 执行查询语句 self.cursor.execute("""SELECT cod, name_client, phone, city FROM clients ORDER BY name_client ASC; """) # 获取所有查询结果 results = self.cursor.fetchall() for i in results: self.list_cli.insert("", END, values=i) self.desconect_bd()
补充说明
fetchall()会一次性获取所有查询结果,返回由元组组成的列表,格式和SQLite中直接遍历游标得到的结果完全一致- 若查询数据量极大,可改用
fetchmany(size=N)分批获取数据,避免一次性加载过多数据占用内存
内容的提问来源于stack exchange,提问作者dandaraCarvalho_
相关产品推荐
相关产品推荐

