mysql - 使用 Sequelize JS 插入唯一记录的更好方法

标签 mysql sequelize.js

我想知道如果我要插入的记录存在,是否有更好的方法先检查数据库以避免重复。这样我就可以插入唯一的记录。

现在我所做的是通过 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 执行此操作?

最佳答案

我认为您必须使用 Sequelize 的 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}};

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

阅读this getting started并使用现成的 Sequelize ORM 方法节省您的时间

关于mysql - 使用 Sequelize JS 插入唯一记录的更好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50164854/

相关文章:

mysql - 如何通过 DBIx 为多对多关系插入数据?

MySql 重复数据另一个表上的条目

node.js - Sequelizejs 模型创建回调未同步运行?

javascript - 使用 sequelize 事务时如何返回新创建的对象?

node.js - Sequelize 支持 SQL Server View 吗?

mysql - 如何使用 Node 的 Sequelize 更新记录?

node.js - 如何处理在我想要的之前返回的异步代码?

mysql - 哪个更快 - 从 n 列中获取具有大小 t 的单个值的列,或从 1 列中获取大小为 n*t 的列?

mysql - 使用 JPA 在 mySql 中保存字符串数组

mysql - Django mysql : stored procedure won't execute