使用sequelize js插入唯一记录的更好方法

vom3gejh  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(356)

我想知道是否有更好的方法首先检查数据库,如果我要插入的记录存在,以避免重复。这样我就可以插入唯一的记录。
现在我所做的是通过if语句进行原始查询,以检查数据库是否通过了插入记录的条件:

const addName = function(name, amount) {
  sequelize.query(`SELECT * FROM names WHERE name="${name}"`, { type: sequelize.QueryTypes.SELECT})
    .then(names => {
      if (names.length === 0) {
        sequelize.query(
          `INSERT INTO names (name, amount) VALUES('${name}','${amount}')`, {
            type: Sequelize.QueryTypes.INSERT
          }
        ).then(function (data) {
          console.log('inserted STEAMER data---> ', data); 
        });
      } else {
        console.log('Duplicate records >>>>>>');
      }
    });
};

有没有其他方法可以通过sequelize js实现这一点?

ghg1uchk

ghg1uchk1#

我想你应该用orm的续集方式打个电话 findOrCreate 模型上的方法。
例子:

  1. db.js :
const Sequelize = require('sequelize');

const sequelize = new Sequelize('mysql://user:pass@127.0.0.1:3306/dbname');

const Name = sequelize.define('Name', {
  name: {
   type: Sequelize.STRING,
   allowNull: false,
   unique: true 
  },
  amount: {
   type: Sequelize.DECIMAL(10, 2), // or .INTEGER
   allowNull: false,
   defaultValue: 0
  }
}, {
  tableName: 'names', 
  timestamps: false, 
  freezeTableName: true
});

// extending model with method
Name.upsert = (name, amount) => {
  const find = {name};
  const create = {name, amount};
  return Name.findOrCreate({where: find, defaults: create});
};

module.exports = {sequelize, models: {Name}};
  1. app.js (在expressjs示例中):
const db = require('./db');
const Name = db.models.Name;

app.post('/names', async (req, res) => {
  try {
    const name = req.body.name;
    const amount = req.body.amount;
    const result = await Name.upsert(name, amount);
    res.status(200).send(result);
  }
  catch (error) {
     res.status(500).send(error);
  }
});

阅读此入门,并保存您的一天与随时可用的方法续集orm

相关问题