看一段官网中代码例子,一一说明
//1
sequelize.query('SELECT 1', {
logging: console.log,
plain: false,
raw: false,
type: Sequelize.QueryTypes.SELECT
})
//2
sequelize
.query('SELECT * FROM projects', { raw: true })
.then(projects => {
console.log(projects)
})
//3
sequelize.query('SELECT * FROM projects WHERE status = ?',
{ replacements: ['active'], type: sequelize.QueryTypes.SELECT }
).then(projects => {
console.log(projects)
})
//4
sequelize.query('SELECT * FROM projects WHERE status = :status ',
{ replacements: { status: 'active' },
type: sequelize.QueryTypes.SELECT }
).then(projects => {
console.log(projects)
})
-
sequelize中提供了query函数,用于直接操作原生语句
-
该函数将返回两个参数:结果数组和包含元数据的对象,对于mysql将是返一对象的两个引用。
-
query函数的第二个参数,是一个对象,对象里面几个常用参数进行说明。
- pain:如果plain为真,那么sequelize只返回第一个记录结果集。如果为false,则返回所有记录。
- type:正在执行的查询的类型(具体哪些去看官网api)。查询类型影响返回结果之前的格式化方式。
- raw:查询对类型是否有模型定义,如果您的查询没有模型定义,请将此设置为true。
- logging: console.log记录查询的函数,是否会为发送的每个SQL查询调用到服务器。
-
对于查找条件where后面的字段
- 如果传递数组,? 将按它们在数组中出现的顺序进行替换。
- 如果传递了一个对象,:key则将替换该对象中的键。如果对象包含查询中未找到的键,会抛出查询异常。
-
对于替换where后面的变量,也可以使用 in 关键字从数组匹配,也可以使用通配符 like% 等。代码如下:
//in关键字使用官网例子 sequelize.query('SELECT * FROM projects WHERE status IN(:status) ', { replacements: { status: ['active', 'inactive'] }, type: sequelize.QueryTypes.SELECT } ).then(projects => { console.log(projects) }) //like通配符关键字使用官网例子 sequelize.query('SELECT * FROM users WHERE name LIKE :search_name ', { replacements: { search_name: 'ben%' }, type: sequelize.QueryTypes.SELECT } ).then(projects => { console.log(projects) })
-
查询的时候还可以直接传递model,如果传递模型,则返回的数据将是该模型的实例,上面其它字段也可以在这使用
sequelize
.query('SELECT * FROM projects', {
model: Projects,
mapToModel: true // 如果有任何映射字段,则在这里传递true
})
.then(projects => {
// Each record will now be an instance of Project
})