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

如何用UPDATE语句修改JSON键值对?SQLite及Node.js实现方法

解决方案

一、用SQL查询直接实现(SQLite 3.38.0+)

SQLite 从3.38.0版本开始原生支持JSON操作函数,你可以直接用json_set()函数完成目标更新:

UPDATE your_table_name
SET json_column = json_set(json_column, '$.foo', 'changed_value')
-- 可添加WHERE条件定位特定行,比如 WHERE id = 1;

json_set()的作用是修改JSON对象中指定路径的属性值,$.foo就是定位到foo键的路径。

二、Node.js实现(适用于低版本SQLite)

如果你的SQLite版本不支持JSON函数,可以用Node.js结合sqlite3库快速完成,以下是最简实现:
首先安装依赖:

npm install sqlite3

回调风格代码

const sqlite3 = require('sqlite3').verbose();
const db = new sqlite3.Database('./your_database.db'); // 替换为你的数据库路径

// 示例:更新id为1的行
db.get('SELECT json_column FROM your_table_name WHERE id = ?', [1], (err, row) => {
  if (err) throw err;
  const jsonData = JSON.parse(row.json_column);
  jsonData.foo = 'changed_value';
  db.run('UPDATE your_table_name SET json_column = ? WHERE id = ?', [JSON.stringify(jsonData), 1], (err) => {
    if (err) throw err;
    console.log('更新完成');
    db.close();
  });
});

Async/Await风格代码(更易读)

const sqlite3 = require('sqlite3').verbose();
const { promisify } = require('util');
const db = new sqlite3.Database('./your_database.db');
// 转换为Promise风格方法
db.get = promisify(db.get);
db.run = promisify(db.run);

(async () => {
  try {
    const row = await db.get('SELECT json_column FROM your_table_name WHERE id = ?', [1]);
    const jsonData = JSON.parse(row.json_column);
    jsonData.foo = 'changed_value';
    await db.run('UPDATE your_table_name SET json_column = ? WHERE id = ?', [JSON.stringify(jsonData), 1]);
    console.log('更新完成');
  } catch (err) {
    console.error(err);
  } finally {
    db.close();
  }
})();

内容的提问来源于stack exchange,提问作者Александр Третинов

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 04:30:51