Sequlize提供的工具函数sequelize.query
原始查询方法
默认情况下,该函数会返回两个参数 - 一个包含结果的数组和一个包含原数据对象。请注意,由于是原始查询,所以返回的元数据与使用的数据库类型有关,其对元数据的处理并不一致
sequelize.query("UPDATE users SET y = 42 WHERE x = 12").spread(function(results, metadata) {
// Results 会是一个空数组和一个包含受影响行数的metadata 元数据对象
})
如果不想使用元数据,可以查询时指定表示查询类型的type参数,以告诉sequelize 应该怎样去格式化返回结果。
sequelize.query("SELECT * FROM `users`", { type: sequelize.QueryTypes.SELECT})
.then(function(users) {
// 并不需要在这spread 展开结果,因为所返回的只有所查询的结果
})
查询参数替换
原始查询中有两种替换查询参数的方法,以:开头的参数的形式替换或以不命名以?替换。在选项对象中传递参数:
- 如果传递一个数组,? 会按数组的顺序被依次替换
- 巢传递一个对象,:key将会用对象的键替换。如果对象中未找到指定键,则会引发异常(反之亦然)
sequelize.query('SELECT * FROM projects WHERE status = ?',
{ replacements: ['active'], type: sequelize.QueryTypes.SELECT }
).then(function(projects) {
console.log(projects)
})
sequelize.query('SELECT * FROM projects WHERE status = :status ',
{ replacements: { status: 'active' }, type: sequelize.QueryTypes.SELECT }
).then(function(projects) {
console.log(projects)
})