Python中执行MySQL多SQL语句(查询+更新)报错求助
解决mysql.connector执行多语句时"No result set to fetch from"错误
嘿,这个问题我太熟了!你踩的坑在于:UPDATE语句是不会返回结果集的,但你遍历所有cursor的时候,不管三七二十一都调用了fetchall(),碰到UPDATE对应的cursor自然就报错了——它根本没数据给你取啊!
给你改个能跑的版本,顺便补个容易忘的事务提交:
cursor = cnx.cursor() query = "select id, mail from `candidats`; UPDATE candidats SET statusmail=1 " results = cursor.execute(query, multi=True) for cur in results: print('cursor:', cur) # 先判断当前cursor是否有结果集,只有SELECT这类查询才会有 if cur.with_rows: print('result:', cur.fetchall()) else: # 对于UPDATE/INSERT这类语句,打印受影响的行数,确认操作生效 print(f'更新/插入语句,受影响行数: {cur.rowcount}') # 重要!执行UPDATE后必须提交事务,不然数据库不会保存你的修改 cnx.commit() cursor.close() cnx.close()
再给你提两个小提醒:
- 开启
multi=True执行多语句的时候,一定要注意SQL注入风险,别直接把用户输入拼进SQL里,尽量用参数绑定。 - 如果你的两条语句逻辑上有关联(比如用SELECT的结果去UPDATE),最好分开执行,或者用事务包裹,避免出现数据不一致的情况。
内容的提问来源于stack exchange,提问作者Kef
相关产品推荐
相关产品推荐

