准备好model
略
以下使用中, sequlize为 数据库连接后得到的对象, model为sequlize定义的 对应表的模型.
Sql –Select –sequelize
- 一般情况
model.findAll(
attribute: ['name', 'age']
);
// 相当于sql中 select name,age from tableName
// 说明
/*
在sequlize中,使用attribute以数组的形式来表明要选择的 数据库表的属性,
如果不设置,默认 表 中 所有字段 都选上.
*/
- 为属性取别名
model.findAll(
attribute: ['name', ['age', 'user_name']]
);
// 相当于sql中 select name,age as user_name from tableName
// 说明
/*attribute数组中某个属性要取别名, 可以 将该属性 替换成 一个数组, 数组格式为: ['原先的属性名称', '要设置的别名']*/
- 使用聚合函数
model.findAll(
attribute: ['name', [sequlize.fn('COUNT', sequlize.col('colName')), 'alias']]
);
// 相当于sql中 select name,COUNT(colName) as aliasName from tableName
// 说明
/*
sequlize.fn('函数的名字', '函数的其它参数')
因此在 上述语句中,有一下功能:
1. 使用COUNT函数,参数为 COUNT的参数为colName
2. 使用数组为该聚合属性 设置别名 alias,便于获取该属性值
*/
- 便利的设置
以下不理解inlucde中 查询结果中 字段gf会被 他的统计字段替换???
// include
// 如果要选取表中所有属性,仅仅是要增加新的属性.
model.findAll({
attribute: ['name', 'age', 'school', [sequelize.fn('COUNT', sequelize.col('gf')), 'life']]
});
// 替换成sequelize便捷操作
model.findAll({
attribute: {include: [
[sequelize.fn('COUNT', sequelize.col('gf')), 'life']]
});
// 相当于 select name,age,school,COUNT(gf) as life from tableName
// 说明
/*
include 会将所有的表的属性选上,并包括数组中的新的属性
因此在 上述语句中,有一下功能:
1. 选择所有表的字段
2. 将聚合新字段加入搜索结果中
*/
// extend
// 如果要选取表中所有属性,仅仅是要排其中某个属性.
model.findAll({
attribute: ['name', 'age']]
});
// 替换成sequelize便捷操作
model.findAll({
attribute: {exclude: ['school']
});
// 去除school,相当于 select name,age from tableName
// 说明
/*
exclude 会将所有的表的属性选上,并包括数组中的新的属性
因此在 上述语句中,有以下功能:
1. 选择所有表的字段
2. 将school字段排除
*/
Sql –Where –sequelize
sql中的where 对应 sequelize查询对象中的where.
- 一般使用
model.findAll({
where: {
name: '@sunhao'
}
});
// 相当于 select * from tableName where name=`@sunhao`
// 说明
/*
where 应该赋值为对象.
普通的键值对,被作为相等条件处理.
*/
- 其他的操作符
sequlize支持有很多操作符号,一下为我常用的(初学者):
$and
: {a: 5} // AND (a = 5)
$or
: [{a: 5}, {a: 6}] // (a = 5 OR a = 6)
$gt
: 6, // > 6 greater than
$gte
: 6, // >= 6 greater than equla
$lt
: 10, // < 10 less than
$lte
: 10, // <= 10 less than eqaul
$ne
: 20, // != 20 not equal
$not
: true, // IS NOT TRUE
$between
: [6, 10], // BETWEEN 6 AND 10
$notBetween
: [11, 15], // NOT BETWEEN 11 AND 15
$in
: [1, 2], // IN [1, 2]
$notIn
: [1, 2], // NOT IN [1, 2]
$like
: ‘%hat’, // LIKE ‘%hat’
$notLike
: ‘%hat’ // NOT LIKE ‘%hat’
sql -order -sequelize
根据字段排序
model.findAll({
order: [
['age', 'DESC'],
['name'
]
});
// 或者 对单个属性(默认递增)
model.findAll({
order: 'age'
});