gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 05:55:05 27 4
gpt4 key购买 nike

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

现在我所做的是通过 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com