使用Node.js更新SQL(Better-SQlite3)中的值

d8tt03nd  于 2022-11-15  发布在  SQLite
关注(0)|答案(2)|浏览(197)

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

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 }]
    );
  }

我一直收到db.query is not a function的错误,但我尝试的每个函数都会得到这个错误。
对SQL非常陌生,但我只是想弄清楚这一点或任何对我有帮助的文档--在官方文档中,SQlite3没有任何update函数。

chy5wohz

chy5wohz1#

我在better-sqlite3 API for the Database class中找不到名为query()的函数。我认为你需要prepare()一个Statement对象,然后run()
此外,列名不能作为绑定参数传递。您的查询应该如下所示:

UPDATE people SET status = ? WHERE name = ?

您需要更改以下内容:

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

致:

const stmt = db.prepare('UPDATE people SET status = ? WHERE id = ?'); 
const updates = stmt.run(status, id);
0s0u357o

0s0u357o2#

根据templates,您可以使用Java脚本语法将变量替换为它的值。

let updates = db.exec(`UPDATE people SET status='${status}' WHERE id='${id}'`);

相关问题