sequelize基础知识学习整理
安装
1 | npm install --save sequelize |
连接
1 | const Sequelize = require('sequelize'); |
model
1 | const User = sequelize.define('user', { |
mdoel 类型
以下是 Sequelize 支持的一些数据类型.有关完整和更新的列表, 参阅DataTypes1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57Sequelize.STRING // VARCHAR(255)
Sequelize.STRING(1234) // VARCHAR(1234)
Sequelize.STRING.BINARY // VARCHAR BINARY
Sequelize.TEXT // TEXT
Sequelize.TEXT('tiny') // TINYTEXT
Sequelize.INTEGER // INTEGER
Sequelize.BIGINT // BIGINT
Sequelize.BIGINT(11) // BIGINT(11)
Sequelize.FLOAT // FLOAT
Sequelize.FLOAT(11) // FLOAT(11)
Sequelize.FLOAT(11, 12) // FLOAT(11,12)
Sequelize.REAL // REAL 仅限于PostgreSQL.
Sequelize.REAL(11) // REAL(11) 仅限于PostgreSQL.
Sequelize.REAL(11, 12) // REAL(11,12) 仅限于PostgreSQL.
Sequelize.DOUBLE // DOUBLE
Sequelize.DOUBLE(11) // DOUBLE(11)
Sequelize.DOUBLE(11, 12) // DOUBLE(11,12)
Sequelize.DECIMAL // DECIMAL
Sequelize.DECIMAL(10, 2) // DECIMAL(10,2)
Sequelize.DATE // DATETIME 针对 mysql / sqlite, TIMESTAMP WITH TIME ZONE 针对 postgres
Sequelize.DATE(6) // DATETIME(6) 针对 mysql 5.6.4+. 小数秒支持多达6位精度
Sequelize.DATEONLY // DATE 不带时间.
Sequelize.BOOLEAN // TINYINT(1)
Sequelize.ENUM('value 1', 'value 2') // 一个允许具有 “value 1” 和 “value 2” 的 ENUM
Sequelize.ARRAY(Sequelize.TEXT) // 定义一个数组。 仅限于 PostgreSQL。
Sequelize.ARRAY(Sequelize.ENUM) // 定义一个 ENUM 数组. 仅限于 PostgreSQL。
Sequelize.JSON // JSON 列. 仅限于 PostgreSQL, SQLite and MySQL.
Sequelize.JSONB // JSONB 列. 仅限于 PostgreSQL .
Sequelize.BLOB // BLOB (PostgreSQL 二进制)
Sequelize.BLOB('tiny') // TINYBLOB (PostgreSQL 二进制. 其他参数是 medium 和 long)
Sequelize.UUID // PostgreSQL 和 SQLite 的 UUID 数据类型, CHAR(36) BINARY 针对于 MySQL (使用默认值: Sequelize.UUIDV1 或 Sequelize.UUIDV4 来让 sequelize 自动生成 ID)
Sequelize.CIDR // PostgreSQL 的 CIDR 数据类型
Sequelize.INET // PostgreSQL 的 INET 数据类型
Sequelize.MACADDR // PostgreSQL 的 MACADDR
Sequelize.RANGE(Sequelize.INTEGER) // 定义 int4range 范围. 仅限于 PostgreSQL.
Sequelize.RANGE(Sequelize.BIGINT) // 定义 int8range 范围. 仅限于 PostgreSQL.
Sequelize.RANGE(Sequelize.DATE) // 定义 tstzrange 范围. 仅限于 PostgreSQL.
Sequelize.RANGE(Sequelize.DATEONLY) // 定义 daterange 范围. 仅限于 PostgreSQL.
Sequelize.RANGE(Sequelize.DECIMAL) // 定义 numrange 范围. 仅限于 PostgreSQL.
Sequelize.ARRAY(Sequelize.RANGE(Sequelize.DATE)) // 定义 tstzrange 范围的数组. 仅限于 PostgreSQL.
Sequelize.GEOMETRY // 空间列. 仅限于 PostgreSQL (具有 PostGIS) 或 MySQL.
Sequelize.GEOMETRY('POINT') // 具有几何类型的空间列. 仅限于 PostgreSQL (具有 PostGIS) 或 MySQL.
Sequelize.GEOMETRY('POINT', 4326) // 具有几何类型和SRID的空间列. 仅限于 PostgreSQL (具有 PostGIS) 或 MySQL.
mdoel defaultValue
find 使用
find 搜索数据库中的一个特定元素
1 | // 搜索已知的ids |
findOrCreate 搜索特定元素或创建它(如果不可用)
我们有一个空的数据库,一个 User 模型有一个 username 和 job1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23User
.findOrCreate({
where: {username: 'sdepold'},
defaults: {job: 'Technical Lead JavaScript'}
})
.spread((user, created) => {
console.log(user.get({
plain: true
}))
console.log(created)
/*
findOrCreate 返回一个包含已找到或创建的对象的数组,找到或创建的对象和一个布尔值,如果创建一个新对象将为true,否则为false,像这样:
[ {
username: 'sdepold',
job: 'Technical Lead JavaScript',
id: 1
},
true ]
在上面的例子中,".spread" 将数组分成2部分,并将它们作为参数传递给回调函数,在这种情况下将它们视为 "user" 和 "created" 。(所以“user”将是返回数组的索引0的对象,并且 "created" 将等于 "true"。)
*/
})
创建了一个新的实例.所以当我们已经有一个实例了1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23User.create({ username: 'fnord', job: 'omnomnom' })
.then(() => User.findOrCreate({
where: {username: 'fnord'},
defaults: {job: 'something else'}
}))
.spread((user, created) => {
console.log(user.get({
plain: true
}))
console.log(created)
/*
在这个例子中,findOrCreate 返回一个如下的数组:
[ {
username: 'fnord',
job: 'omnomnom',
id: 2
},
false
]
由findOrCreate返回的数组通过 ".spread" 扩展为两部分,并且这些部分将作为2个参数传递给回调函数,在这种情况下将其视为 "user" 和 "created".(所以“user”将是返回数组的索引0的对象,并且 "created" 将等于 "false"。)
*/
})
findAndCountAll - 在数据库中搜索多个元素,返回数据和总计数
处理程序成功将始终接收具有两个属性的对象:
- count - 一个整数,总数记录匹配where语句和关联的其它过滤器
- rows - 一个数组对象,记录在limit和offset范围内匹配where语句和关联的其它过滤器
1 | Project |
它支持 include。 只有标记为 required 的 include 将被添加到计数部分:
假设您想查找附有个人资料的所有用户:1
2
3
4
5
6User.findAndCountAll({
include: [
{ model: Profile, required: true}
],
limit: 3
});
因为 Profile 的 include 有 required 设置,这将导致内部连接,并且只有具有 profile 的用户将被计数。 如果我们从 include 中删除required,那么有和没有 profile 的用户都将被计数。 在include中添加一个 where 语句会自动使它成为 required:1
2
3
4
5
6User.findAndCountAll({
include: [
{ model: Profile, where: { active: true }}
],
limit: 3
});
上面的查询只会对具有 active profile 的用户进行计数,因为在将 where 语句添加到 include 时,required 被隐式设置为 true
传递给 findAndCountAll 的 options 对象与 findAll 相同(如下所述)
findAll - 搜索数据库中的多个元素
1 | // 找到多个条目 |
1 | // 限制字段 |
操作符 where1
2
3
4
5
6
7
8
9
10
11
12
13
14'$eq': 1, // = 1
'$ne': 2, // != 2
'$gt': 6, // > 6
'$gte': 6, // >= 6
'$lt': 10, // < 10
'$lte': 10, // <= 10
'$between': [6, 10], // BETWEEN 6 AND 10
'$notBetween': [11, 15], // NOT BETWEEN 11 AND 15
'$in': [1, 2], // IN (1, 2)
'$notIn': [3, 4] // NOT IN (3, 4)
'$like': '%a%', // LIKE '%a%'
'$notLike': '%a' // NOT LIKE '%a'
'$eq': null, // IS NULL
'$ne': null // IS NOT NULL
- $and
- $or
- $not
- order 排序
- 分页 User.findAll({
‘limit’: countPerPage, // 每页多少条
‘offset’: countPerPage * (currentPage - 1)// 跳过多少条
})
1 | // OR条件 |
1 | // AND条件 |
1 | // NOT条件 |
1 |
1 |
1 |
1 |
改 update 使用
1 | // 方法1:操作对象属性(不会操作db),调用save后操作db |
ffff
1 | User.findAll().then((users) => { |
- new Sequelize
- sequelize.models 返回通过sequelize.define定义的所有模型对象
- sequelize.define
- sequelize.Utils
- sequelize.Promise
- sequelize.QueryTypes 查询类型枚举
- sequelize.Validator
- sequelize.Transaction 事务对象
project.max(‘age’)
project.min(‘age’)
project.sum(‘age’)
欢迎访问我的博客 地址
https://blog.afacode.top
广告
阿里云活动云服务器低至1核-2G-1M,1年89元,3年229。
2核-4G-3M,2年469元,3年799。
2核-8G-5M,3年899元。
新老客户都有优惠 点击查看详情/购买
腾讯云现在活动
1核 2G 1M 88一年
2核 4G 5M 3年只要998。 点击查看详情/购买