我正在为我的应用程序开发一个后端路由,它需要添加多行(从客户端客户端接收的数组中的每个项目一行)。我的第一个想法是通过我的数据做一个for
循环,并为每个数组项做一个数据库查询,如下所示:
router.get('api/postGuests', (req, res) => {
const arrayOfPeople = req.body;
// arrayOfPeople looks like this for example: [{name: Jason, age: 24}, {name: Tyler, age: 34}]
for (let i=0; i<arrayOfPeople.length; i++) {
db.query('INSERT INTO people (name, age) VALUES (?, ?)', [arrayofPeople[i].name, arrayOfPeople[i].age])
}
})
问题是我不认为它是有效的为每一行做一个单独的查询,并且考虑到这些查询是异步的,我可以看到有很多问题出现在我的规模。
谁能给我一些建议,如何最好地处理这种情况?谢谢你!不需要使用多个语句。您可以使用单个INSERT
语句插入多行。
只需调整您准备的语句并一次传递所有值。注意,传递给db.query
的参数需要是一个用数组包装的数组的数组。
短的例子:
const arrayOfPeople = [
{name: "Jason", age: 24},
{name: "Tyler", age: 34},
...
];
db.query(
'INSERT INTO people (name, age) VALUES ?',
[arrayOfPeople.map(item => [item.name, item.age])]
);
VALUES
子句可以包含(?, ?)
短语列表。您可以使用与您想要插入的对数量相对应的数来构建查询,然后只执行一个查询来完成它。