Node.js中如何从SQLite3的INSERT...RETURNING *获取数据
解决INSERT RETURNING获取返回行的问题
你的问题出在使用了错误的数据库方法,并且存在语法错误:
错误的方法选择:
db.run()仅用于执行不返回结果集的SQL语句(比如普通的INSERT/UPDATE/DELETE),它的回调函数不会返回RETURNING子句的结果行,只会返回包含changes(影响行数)、lastID(自增主键ID)的元数据对象。如果要获取RETURNING返回的完整行数据,需要使用db.get()(因为INSERT操作只会返回一行)。语法错误:你把回调函数写在了
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:
但这种方式只能拿到自增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); });RETURNING+db.get()的方式更灵活。
内容的提问来源于stack exchange,提问作者Logan
相关产品推荐
相关产品推荐

