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

Node.js中如何从SQLite3的INSERT...RETURNING *获取数据

解决INSERT RETURNING获取返回行的问题

你的问题出在使用了错误的数据库方法,并且存在语法错误:

  1. 错误的方法选择:db.run() 仅用于执行不返回结果集的SQL语句(比如普通的INSERT/UPDATE/DELETE),它的回调函数不会返回RETURNING子句的结果行,只会返回包含changes(影响行数)、lastID(自增主键ID)的元数据对象。如果要获取RETURNING返回的完整行数据,需要使用db.get()(因为INSERT操作只会返回一行)。

  2. 语法错误:你把回调函数写在了db.run()的调用外面,正确的写法是把回调作为db.run()/db.get()的第三个参数。

修正后的代码示例

假设你使用的是sqlite3驱动,正确的代码如下:

const sql = "INSERT INTO table(value) VALUES (?) RETURNING *";
db.get(sql, [value], (err, row) => {
  if (err) return console.error(err.message);
  // 假设你的主键列名为id,直接从返回的行对象中取出
  console.log("value id is:", row.id);
  // 如果需要其他字段,比如插入的value值,也可以直接取
  // console.log("inserted value:", row.value);
});

补充说明

  • 如果你的表使用自增主键,即使不用RETURNING,也可以通过db.run()的回调结果拿到自增ID:
    const sql = "INSERT INTO table(value) VALUES (?)";
    db.run(sql, [value], function(err) {
      if (err) return console.error(err.message);
      console.log("value id is:", this.lastID);
    });
    
    但这种方式只能拿到自增ID,如果你需要同时获取其他插入的字段值,RETURNING + db.get()的方式更灵活。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 09:42:11