You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:15:55