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);
}
});
阅读此入门并使用 Sequelize ORM 的现成方法节省您的一天
推荐阅读
- c# - 在 .NET CORE 3.1 Web API 项目中配置 nLog 的自定义布局渲染器
- javascript - 如果元素已更改,如何创建替换元素的功能
- php - 计算从 codeigniter 中的 foreach 生成的表支付的总金额
- git - 推送被拒绝。未能推送一些 refs,您当前分支的尖端位于其远程分支的后面
- mysql - Azure - MySQL/PHP 错误:[2002] 每个套接字地址(协议/网络地址/端口)通常只允许使用一次
- c# - 继承的最佳实践:属性也应该是接口吗?
- javascript - onNavigationStateChange 在反应原生 WebView 组件中呈现两次
- python - 如何在 debian 10 上使用 checkinstall 安装 python3.8?
- python - 获取无限数的索引数 1121231234...n
- vue.js - 是否可以使用 Nuxt.js + Vuetify + 外部 Javascript 库?