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

使用psycopg执行INSERT报错“the last operation didn't produce a result”的原因

错误触发原因

你替换INSERT语句后没有删除原有适配SELECT查询的fetchall()调用,是触发该错误的核心原因:

  • 只有执行带结果集返回的SQL语句(比如SELECT、带RETURNING子句的INSERT/UPDATE/DELETE)后,才能调用cur.fetchall()、cur.fetchone()这类游标取数方法
  • 普通无RETURNING子句的INSERT属于写操作,执行后不会产生查询结果集,此时调用取数方法就会抛出该错误
修复方案

根据你的业务需求选一种即可:

  1. 不需要获取插入返回数据的场景,直接删除原代码中res = cur.fetchall()和print(res)两行即可,INSERT执行无报错就默认操作生效,psycopg的连接上下文管理器会在无异常时自动提交事务。
    修改后可运行的代码示例:
with psycopg.connect(host="host_name", dbname="db_name", user="user", password="pass") as conn:
  with conn.cursor() as cur:
    cur.execute("INSERT INTO table_name (column_1, column_2) VALUES (%s, %s)", ("a","b"))
  1. 需要获取插入后返回数据(比如自增主键ID、生成的字段值)的场景,给INSERT语句加上RETURNING子句指定要返回的字段即可保留取数逻辑:
with psycopg.connect(host="host_name", dbname="db_name", user="user", password="pass") as conn:
  with conn.cursor() as cur:
    # 示例返回插入行的id字段,可替换为你需要的字段名或*返回整行
    cur.execute("INSERT INTO table_name (column_1, column_2) VALUES (%s, %s) RETURNING id", ("a","b"))
    res = cur.fetchall()
    print(res)

内容的提问来源于stack exchange,提问作者gbox

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 07:48:02