使用 Node.JS 更新 SQL (better-sqlite3) 中的值

Dan*_*uro 6 sql sqlite node.js sql-update better-sqlite3

我目前有一个人的数据库,每个人都有一个状态值。我正在尝试更改它们的状态值。

  const id = parseInt(req.params.id , 10);
  const { valid, messageObj } = validateId(id);
  if (!valid) {
    res.status(400).send(messageObj);
  }

  let { status, priority } = req.body;
  let people = db.prepare('select * from people').all();
  const person = people.find(person => person.id === id);    

  if(status !== 'none' & status == 'ready' || status == 'done'){
    let updates = db.query(
        'UPDATE people SET ? WHERE ?', 
         [{ status: status }, { id: id }]
    );
  }
Run Code Online (Sandbox Code Playgroud)

我不断收到错误消息,db.query is not a function但是对于我尝试的每个功能,我都会收到错误消息。

对 SQL 非常陌生,但只是想弄清楚这一点或任何对我有帮助的文档,因为 Better-sqlite3update在官方文档中没有任何功能。

GMB*_*GMB 9

我找不到query()better-sqlite3 API 中为该类Database调用的函数。我认为你需要prepare()一个Statement对象,然后run()是它。

此外,列名不能作为绑定参数传递。您的查询应如下所示:

UPDATE people SET status = ? WHERE name = ?
Run Code Online (Sandbox Code Playgroud)

您需要更改此设置:

let updates = 
    db.query('UPDATE people SET ? WHERE ?', [{ status: status }, { id: id }]);
Run Code Online (Sandbox Code Playgroud)

到:

const stmt = db.prepare('UPDATE people SET status = ? WHERE id = ?'); 
const updates = stmt.run(status, id);
Run Code Online (Sandbox Code Playgroud)

  • 如果需要的话,可以浓缩 `const info = db.prepare('update people set status = ? where id =?').run(status,id);` (2认同)