Node环境下SQLite执行带RETURNING的INSERT语句报语法错误如何解决
问题根因
- SQLite的
RETURNING插入返回语法仅支持3.35.0及以上版本,低于该版本的SQLite运行环境会直接抛出语法错误。 - 你使用的Node.js SQLite驱动(常见为
sqlite3包)内置的SQLite内核版本低于3.35.0,因此即使官方文档标注支持该语法,实际运行时也会报错。
解决方案
方案1:升级依赖直接使用RETURNING语法
升级sqlite3包到最新版本,新版本内置的SQLite内核已经兼容3.35.0+的所有特性:
npm install sqlite3@latest
升级完成后重启服务即可正常执行你原有带RETURNING的插入语句。
方案2:低版本兼容写法
如果因环境限制无法升级依赖,可以通过sqlite3内置的lastID属性实现相同效果:
// 不要用箭头函数,否则无法获取this上下文的lastID db.run(`INSERT INTO lists (name) VALUES (?);`, [name], function(err) { if (err) { // 自定义错误处理逻辑 return } // 用刚生成的自增id查询完整条目,等价于RETURNING *的效果 db.get(`SELECT * FROM lists WHERE id = ?`, [this.lastID], (err, row) => { // 此处row即为插入完成的完整条目数据 ... }) });
内容的提问来源于stack exchange,提问作者Sifi_crafter
相关产品推荐
相关产品推荐

