【问题标题】:Postgres UPDATE inserted value instead of all columnsPostgres UPDATE 插入值而不是所有列
【发布时间】:2020-06-06 11:10:29
【问题描述】:

假设我们在一个表中有 10 列,我们希望只输入 1 个值来更新我们的表列,并且不更改剩余值。

所以只有我们的新值会更新,不必要的值不会是 Null ...?

我问这个是因为我正在使用This code 并且我想发送 put 请求取决于我编辑的内容...

我正在使用此查询将来自 body(react) 的请求放入节点 postgres ...

router.put("/user/:nationalcode", (req, res) => {
  const cols = [
    req.body.nationalcode,
    req.body.stockcode,
    req.body.firstname,
    req.body.lastname,
    req.body.isenable,
    req.body.isonline,
    req.body.detail,
    req.body.birthdate,
    req.body.archive,
    req.body.offlineusername
  ];

  db.query(
    `UPDATE users SET nationalcode=$1, stockcode=$2, firstname=$3, lastname=$4, isenable=$5, isonline=$6, detail=$7, birthdate=$8, archive=$9, offlineusername = $10 WHERE nationalcode = ${req.params.nationalcode}`,
    cols,
    function(err, result) {
      if (err) {
        console.log("Error. Updating : %s ", err);
      }
    }
  );
  console.log(req.body);
});

【问题讨论】:

  • 只需使用普通的 UPDATE 查询。像 UPDATE table SET column = value WHERE x = y
  • 您的其他列将保持不变
  • @iJamesPHP2 我用代码更新了我的问题,你能检查并解决它吗?

标签: javascript node.js reactjs postgresql


【解决方案1】:

你想从你的 req.body 对象中去除空值,在你构建 cols 数组之前使用这个函数来去除它:

function strip(obj) {
    for (var prop in obj) {
        if (obj[prop] === null || obj[prop] === undefined) {
            delete obj[prop];
        }
    }
}

因此,定义函数并将其用作代码的第一行:

var cols = Object.values(strip(req.body));

【讨论】:

  • 我的代码有错误,我没有看到你正在使用 req.body 而不仅仅是 req 来访问列,请使用我的最新编辑
  • @tafhim 哦,我刚刚意识到您的查询是硬编码的,然后您需要在循环中从数组动态构建查询
  • 查询是什么? =)
  • 困惑... sry xD
  • 我们可以只创建两个变量,例如:column : requested col```` and value:req.body ```?这么简单?
猜你喜欢
  • 2019-07-20
  • 2016-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多