代码之家  ›  专栏  ›  技术社区  ›  Irfandy Jip

Sequelize“upsert”没有发挥应有的作用

  •  0
  • Irfandy Jip  · 技术社区  · 7 年前

    嗯,我想用 upsert 命令,但我不断得到错误,我不知道出了什么问题,我已经输入了 object 更新插入 (即 NewIssue )这是基于其他调用的值。

    它的作用

    {
        "name": "SequelizeDatabaseError",
        "parent": {
            "fatal": false,
            "errno": 1064,
            "sqlState": "42000",
            "code": "ER_PARSE_ERROR",
            "sql": "INSERT INTO `ms_issue` VALUES () ON DUPLICATE KEY UPDATE ;"
        },
        "original": {
            "fatal": false,
            "errno": 1064,
            "sqlState": "42000",
            "code": "ER_PARSE_ERROR",
            "sql": "INSERT INTO `ms_issue` VALUES () ON DUPLICATE KEY UPDATE ;"
        },
        "sql": "INSERT INTO `ms_issue` VALUES () ON DUPLICATE KEY UPDATE ;"
    }
    

    我的代码

    数据架构:

    const Issue = sequelize.define('ms_issue', {
        id_Issue: {
            type: Sequelize.NUMBER,
            primaryKey: true
        },
        id_IssueTag: {
            type: Sequelize.NUMBER,
        },
        datetime_Issued: {
            type: Sequelize.NOW
        },
        subject_Issue: {
            type: Sequelize.STRING
        },
        desc_Issue: {
            type: Sequelize.STRING
        },
        status_Issue: {
            type: Sequelize.STRING
        }
    }, { timestamps: false, freezeTableName: true });
    
    app.put('/issues/:id', (req, res) => {
      const id_Staff = req.body.id_Staff
      if (typeof id_Staff !== 'undefined' && typeof id_Staff === 'number') {
        const id_Issue = parseInt(req.params.id)
        if (typeof id_Issue !== 'undefined' && typeof id_Issue === 'number') {
          Issue.findByPk(id_Issue)
            .then(issue => {
              if (issue) {
                const newIssue = {
                  subject_Issue: req.body.subject || undefined,
                  desc_Issue: req.body.description || undefined,
                  id_IssueTag: req.body.tag || undefined
                }
                for (const obj in newIssue) {
                  if (typeof newIssue[obj] !== 'undefined') {
                    issue[obj] = newIssue[obj]
                  }
                }
                const NewIssue = issue
                return NewIssue
              } else res.status(404).send("Issue not found")
            })
            .then(NewIssue => {
              return Issue.upsert(NewIssue)
                .then(bool => {
                  if (bool === true) {
                    res.status(200).send("Issue has been updated")
                    res.status(200).send(NewIssue)
                  }
                })
                .catch(err => {
                  res.status(500).send(err)
                })
            })
            .catch(err => {
              console.log(err)
              res.status(500).send("Cannot connect to database")
            })
        } else {
          res.status(400).send("Invalid parameters: require 'id_Issue'")
        }
      } else {
        res.status(401).send("Unauthorized access")
      }
    })
    

    我想要的
    MariaDB . 和解释:)

    0 回复  |  直到 7 年前
        1
  •  0
  •   KenOn10    7 年前

    "sql": "INSERT INTO `ms_issue` VALUES () ON DUPLICATE KEY UPDATE ;"
    

    如果您大致如下指定,则SQL应该有效:

    ...
    Issue.upsert({
        id_Issue:  id_Issue,
        subject_Issue: NewIssue.subject_Issue, 
        id_IssueTag : NewIssue.id_IssueTag,
    ...